import java.io.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; import javax.swing.table.*; /** * @author Andreas Spirka, Sven Eisenhauer * Dialog zum Ändern und Löschen von Benutzern */ public class ChgUserDlg extends AbstractMyJDlg implements ListSelectionListener { Container c; JPanel contentPane; BorderLayout borderLayout1 = new BorderLayout(); int counter = 0; UserCon users = new UserCon(); // Objekt-Container und TableModel JScrollPane scrollPane = new JScrollPane(); // Scroll-Pane JTable table = new JTable(); // Tabelle JPanel jPanelSouth = new JPanel(); JLabel jLabelSelection = new JLabel(); JTextField jTextFieldAuswahl = new JTextField(); String fName = new String ("user.dat"); JButton delB = new JButton("Löschen"); JButton saveB = new JButton("Speichern"); JButton abbrB = new JButton("Abbrechen"); JComboBox comboBox = new JComboBox(User.sRole); JTextField tf = new JTextField(); DefaultCellEditor cellEd = new DefaultCellEditor(tf); DefaultCellEditor comboEd = new DefaultCellEditor(comboBox); ChgUserDlg() { ButtonListener2 bl = new ButtonListener2(this); c = getContentPane(); setModal(true); c.setLayout(borderLayout1); setSize(new Dimension(600, 300)); setTitle("Benutzer ändern / löschen"); jPanelSouth.setBorder(BorderFactory.createEtchedBorder()); jLabelSelection.setText("Auswahl"); jTextFieldAuswahl.setText("kein Benutzer ausgewählt"); c.add( scrollPane, java.awt.BorderLayout.CENTER ); scrollPane.setVerticalScrollBarPolicy( JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED ); scrollPane.getViewport().add( table ); // Table in Scroll-Pane c.add(jPanelSouth, java.awt.BorderLayout.SOUTH); jPanelSouth.add(delB); jPanelSouth.add(saveB); jPanelSouth.add(abbrB); delB.addActionListener(bl); abbrB.addActionListener(bl); saveB.addActionListener(bl); saveB.setActionCommand("Speichern"); delB.setActionCommand("Löschen"); abbrB.setActionCommand("Abbrechen"); try { FileInputStream fis = new FileInputStream(fName); ObjectInputStream ois = new ObjectInputStream(fis); users = (UserCon) ois.readObject(); ois.close(); fis.close(); } catch (Exception exception) { exception.printStackTrace(); } table.setModel( users ); // Model für Tabelle setzen // Einzelauswahl table.setSelectionMode( ListSelectionModel.SINGLE_SELECTION ); ListSelectionModel lsm = table.getSelectionModel(); lsm.addListSelectionListener( this ); // TableModelListener regitrieren table.setCellSelectionEnabled(true); TableColumn loginColumn = table.getColumnModel().getColumn(0); TableColumn pwColumn = table.getColumnModel().getColumn(1); TableColumn fullNamColumn = table.getColumnModel().getColumn(2); TableColumn uidColumn = table.getColumnModel().getColumn(3); TableColumn roleColumn = table.getColumnModel().getColumn(4); loginColumn.setCellEditor(cellEd); pwColumn.setCellEditor(cellEd); fullNamColumn.setCellEditor(cellEd); uidColumn.setCellEditor(cellEd); roleColumn.setCellEditor(comboEd); Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); Dimension frameSize = getSize(); setLocation((screenSize.width/2)-(frameSize.width/2),(screenSize.height/2)-(frameSize.height/2)); setVisible(true); } /* (non-Javadoc) * @see AbstractMyJDlg#buttonActionPerformed(java.awt.event.ActionEvent) */ public void buttonActionPerformed(ActionEvent e) { if (e.getActionCommand().equals("Abbrechen")) { setVisible(false); } else if(e.getActionCommand().equals("Löschen")) { table.removeEditor(); users.removeUser((User) users.elementAt(table.getSelectedRow())); try { FileOutputStream fos = new FileOutputStream(fName); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(users); oos.close(); fos.close(); } catch (Exception exception) { exception.printStackTrace(); } } else if(e.getActionCommand().equals("Speichern")) { if (table.isEditing()) { table.getCellEditor().stopCellEditing(); } table.removeEditor(); table.clearSelection(); try { FileOutputStream fos = new FileOutputStream(fName); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(users); oos.close(); fos.close(); } catch (Exception exception) { exception.printStackTrace(); } } } /* (non-Javadoc) * @see javax.swing.event.ListSelectionListener#valueChanged(javax.swing.event.ListSelectionEvent) */ public void valueChanged( ListSelectionEvent e ) { /* in der Hörsaalübung kam es hier zum Crash, wenn eine Zeile * ausgewählt war und eine neue hinzugefügt wurde. In diesem * Fall ist die erste und zuletzt ausgewählte Zeile identisch. * Das wir hier abgefangen. */ /*if ( e.getFirstIndex() == e.getLastIndex() ) { jTextFieldAuswahl.setText( "kein Benutzer ausgewählt"); return; } String login = (String) table.getValueAt(table.getSelectedRow(), 0); String nam = (String) table.getValueAt(table.getSelectedRow(), 2); this.jTextFieldAuswahl.setText( login + " (" + nam + ")" );*/ } }