package gui.dialog; import gui.Frame; import java.util.Iterator; import java.util.Vector; import javax.swing.event.TableModelEvent; import javax.swing.event.TableModelListener; import javax.swing.table.AbstractTableModel; import container.ContainerInclude; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.BoxLayout; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JDialog; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.KeyStroke; import ctex.Main; import database.Db; /** * * To Edit the Include Variabls of a File/DB * * @version 1.0 * @author mayersn * */ public class IncludeDialog extends JDialog implements ActionListener{ private static final long serialVersionUID = 1L; private JTable table = null; private final CTex_IncludeMenuModel model; private Db db = null; private JButton bAdd, bEdit, bRemove, bOk, bCancel; private JTextField textField = new JTextField("", 15); private ContainerInclude openedData = null; private int iSelectedRow = 0; public IncludeDialog(Frame owner, Db db){ setLocationRelativeTo(owner); // Close dialog when pressing ESC getRootPane().registerKeyboardAction(new ActionListener() { public void actionPerformed(ActionEvent e) { dispose(); } }, KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), JComponent.WHEN_IN_FOCUSED_WINDOW); setLayout(new BoxLayout(this.getContentPane(), BoxLayout.PAGE_AXIS)); setResizable(false); this.db = db; model = new CTex_IncludeMenuModel(this.db.getAllInclude()); table = getTable(); this.add(setOnScrollPane(table)); add(getPanel1()); add(getPanel2()); add(getPanel3()); pack(); setModal(true); setVisible(true); } private JTable getTable() { table = new JTable(model); table.addMouseListener(new MouseAdapter(){ public void mouseClicked(MouseEvent e){ if (e.getClickCount() == 2){ iSelectedRow = table.getSelectedRow(); openedData = (ContainerInclude) model.getDataAt(iSelectedRow); textField.setText(openedData.getValue()); } } }); return table; } private JPanel getPanel1(){ JPanel panel = new JPanel(); panel.add(new JLabel("Label: ")); panel.add(textField); return panel; } private JPanel getPanel2(){ JPanel panel = new JPanel(); panel.setLayout(new FlowLayout()); bAdd = new JButton(Main.myLang.getString("button.add")); bAdd.addActionListener(this); bEdit = new JButton(Main.myLang.getString("button.edit")); bEdit.addActionListener(this); bRemove = new JButton(Main.myLang.getString("button.remove")); bRemove.addActionListener(this); panel.add(bAdd); panel.add(bEdit); panel.add(bRemove); return panel; } private JPanel getPanel3(){ JPanel panel = new JPanel(); panel.setLayout(new FlowLayout()); bOk = new JButton(Main.myLang.getString("button.ok")); bOk.addActionListener(this); bCancel = new JButton(Main.myLang.getString("button.cancel")); bCancel.addActionListener(this); panel.add(bOk); panel.add(bCancel); return panel; } private JScrollPane setOnScrollPane (JComponent comp){ JScrollPane pane = new JScrollPane(comp); pane.setPreferredSize(new Dimension (300, 200)); return pane; } public void actionPerformed(ActionEvent e) { if (bAdd.getText() == e.getActionCommand()) { ContainerInclude obj = new ContainerInclude(-1, textField.getText()); model.addData(obj); } else if (bEdit.getText() == e.getActionCommand() && openedData != null) { ContainerInclude o = new ContainerInclude(openedData.getId(), textField.getText()); model.editData(o, iSelectedRow); } else if (bRemove.getText() == e.getActionCommand() && openedData != null) { model.editData(new ContainerInclude(openedData.getId(), textField.getText(), true), iSelectedRow); } else if (bOk.getText() == e.getActionCommand()) { db.setAllInclude(model.getData()); this.dispose(); } else if (bCancel.getText() == e.getActionCommand()) { this.dispose(); } else if ((bEdit.getText() == e.getActionCommand() && openedData == null) || (bRemove.getText() == e.getActionCommand() && openedData != null)) { JOptionPane.showMessageDialog(null, Main.myLang.getString("=/"), Main.myLang.getString("Kein Object Ausgewählt"), JOptionPane.ERROR_MESSAGE); } else { System.out.println(e.getActionCommand()); } } } /** TableModel implementation for the CTex_IncludeMenu Class above * */ class CTex_IncludeMenuModel extends AbstractTableModel{ private static final long serialVersionUID = 6692626588737966136L; private Vector<ContainerInclude> data = new Vector<ContainerInclude>(); private Vector<TableModelListener> listeners = new Vector<TableModelListener>(); public CTex_IncludeMenuModel(Vector<ContainerInclude> v){ super(); Iterator<ContainerInclude> pointer = v.iterator(); while (pointer.hasNext()){ addData(pointer.next()); } } public CTex_IncludeMenuModel(){ super(); } public void addData(ContainerInclude obj){ // Das wird der Index des Vehikels werden int index = data.size(); data.add(obj); // Jetzt werden alle Listeners benachrichtigt // Zuerst ein Event, "neue Row an der Stelle index" herstellen TableModelEvent e = new TableModelEvent( this, index, index, TableModelEvent.ALL_COLUMNS, TableModelEvent.INSERT ); // Nun das Event verschicken for( int i = 0, n = listeners.size(); i<n; i++ ){ ((TableModelListener)listeners.get( i )).tableChanged(e); } } public void editData (ContainerInclude obj, int iSelectedRow){ data.remove(iSelectedRow); if (obj.getId() == -1 && obj.getDelete() == true){ } else { data.add(iSelectedRow, obj); } // Zuerst ein Event, "neue Row an der Stelle index" herstellen TableModelEvent e = new TableModelEvent( this, iSelectedRow, iSelectedRow, TableModelEvent.ALL_COLUMNS, TableModelEvent.INSERT ); // Nun das Event verschicken for(int i = 0, n = listeners.size(); i<n; i++ ){ ((TableModelListener)listeners.get( i )).tableChanged(e); } } public Vector<ContainerInclude> getData(){ return data; } // Die Anzahl Columns public int getColumnCount() { return 3; } // Die Anzahl Vehikel public int getRowCount() { return data.size(); } // Die Titel der einzelnen Columns public String getColumnName(int column) { switch( column ){ case 0: return "ID"; case 1: return "Value"; case 2: return "Delete"; default: return null; } } // Der Wert der Zelle (rowIndex, columnIndex) public Object getValueAt(int rowIndex, int columnIndex) { ContainerInclude obj = (ContainerInclude)data.get( rowIndex ); switch( columnIndex ){ case 0: return new Integer(obj.getId()); case 1: return obj.getValue(); case 2: return obj.getDelete(); default: return null; } } // Eine Angabe, welchen Typ von Objekten in den Columns angezeigt werden soll /*public Class getColumnClass(int columnIndex) { switch( columnIndex ){ case 0: return Integer.class; case 1: return String.class; case 2: return Boolean.class; default: return null; } }*/ public void addTableModelListener(TableModelListener l) { listeners.add( l ); } public void removeTableModelListener(TableModelListener l) { listeners.remove( l ); } public boolean isCellEditable(int rowIndex, int columnIndex) { return false; } public void setValueAt(Object aValue, int rowIndex, int columnIndex) { // nicht beachten } public Object getDataAt (int rowIndex){ return (ContainerInclude)data.get(rowIndex); } }