From e4149d42e677b5b811251fa73466e48c2c0c3459 Mon Sep 17 00:00:00 2001 From: socrates Date: Fri, 10 Oct 2014 02:10:26 +0200 Subject: [PATCH] =?UTF-8?q?Benutzer=20k=C3=B6nnen=20jetzt=20fehlerfrei=20g?= =?UTF-8?q?el=C3=B6scht=20und=20bearbeitet=20werden.=20Es=20treten=20keine?= =?UTF-8?q?=20Fehler=20mehr=20bei=20der=20Anzeige=20der=20Tabellenbuttons?= =?UTF-8?q?=20auf.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/de/katho/kBorrow/data/KUser.java | 8 ++ src/de/katho/kBorrow/db/DbConnector.java | 1 + src/de/katho/kBorrow/db/SqlConnector.java | 6 ++ src/de/katho/kBorrow/db/SqliteConnector.java | 17 ++++ src/de/katho/kBorrow/gui/MainWindow.java | 75 +++++++++++---- src/de/katho/kBorrow/gui/TableButton.java | 95 ------------------- .../katho/kBorrow/gui/UserDeleteListener.java | 24 ----- .../kBorrow/gui/UserDeleteTableButton.java | 58 +++++++++++ .../katho/kBorrow/gui/UserEditListener.java | 13 --- .../kBorrow/gui/UserEditTableButton.java | 59 ++++++++++++ src/de/katho/kBorrow/gui/UserTableModel.java | 59 ++++++++++-- 11 files changed, 255 insertions(+), 160 deletions(-) delete mode 100644 src/de/katho/kBorrow/gui/TableButton.java delete mode 100644 src/de/katho/kBorrow/gui/UserDeleteListener.java create mode 100644 src/de/katho/kBorrow/gui/UserDeleteTableButton.java delete mode 100644 src/de/katho/kBorrow/gui/UserEditListener.java create mode 100644 src/de/katho/kBorrow/gui/UserEditTableButton.java diff --git a/src/de/katho/kBorrow/data/KUser.java b/src/de/katho/kBorrow/data/KUser.java index d4b7101..9286ee7 100644 --- a/src/de/katho/kBorrow/data/KUser.java +++ b/src/de/katho/kBorrow/data/KUser.java @@ -22,4 +22,12 @@ public class KUser { public int getId(){ return this.id; } + + public void setName(String pName){ + this.name = pName; + } + + public void setSurname(String pSurname){ + this.surname = pSurname; + } } diff --git a/src/de/katho/kBorrow/db/DbConnector.java b/src/de/katho/kBorrow/db/DbConnector.java index 4303033..f0388b4 100644 --- a/src/de/katho/kBorrow/db/DbConnector.java +++ b/src/de/katho/kBorrow/db/DbConnector.java @@ -9,5 +9,6 @@ public interface DbConnector { public int createUser(String pName, String pSurname); public ArrayList getUserList(); public boolean deleteUser(int id); + public int editUser(int pId, String pName, String pSurname); } diff --git a/src/de/katho/kBorrow/db/SqlConnector.java b/src/de/katho/kBorrow/db/SqlConnector.java index dbf9e3a..93088ee 100644 --- a/src/de/katho/kBorrow/db/SqlConnector.java +++ b/src/de/katho/kBorrow/db/SqlConnector.java @@ -28,5 +28,11 @@ public class SqlConnector implements DbConnector{ // TODO Auto-generated method stub return false; } + + @Override + public int editUser(int pId, String pName, String pSurname) { + // TODO Auto-generated method stub + return 0; + } } diff --git a/src/de/katho/kBorrow/db/SqliteConnector.java b/src/de/katho/kBorrow/db/SqliteConnector.java index 2732235..adb90ea 100644 --- a/src/de/katho/kBorrow/db/SqliteConnector.java +++ b/src/de/katho/kBorrow/db/SqliteConnector.java @@ -238,5 +238,22 @@ public class SqliteConnector implements DbConnector { return null; } } + + @Override + public int editUser(int pId, String pName, String pSurname) { + if(pName.isEmpty() && pSurname.isEmpty()) return 2; + try { + Statement st = this.connection.createStatement(); + String query = "UPDATE user SET name = '"+pName+"', surname = '"+pSurname+"' WHERE id = '"+pId+"'"; + + st.executeUpdate(query); + + return 0; + } + catch(SQLException e){ + e.printStackTrace(); + return 1; + } + } } diff --git a/src/de/katho/kBorrow/gui/MainWindow.java b/src/de/katho/kBorrow/gui/MainWindow.java index bd9fae6..de75c8d 100644 --- a/src/de/katho/kBorrow/gui/MainWindow.java +++ b/src/de/katho/kBorrow/gui/MainWindow.java @@ -1,6 +1,5 @@ package de.katho.kBorrow.gui; -import javax.swing.JCheckBox; import javax.swing.JFrame; import javax.swing.JTabbedPane; import javax.swing.UIManager; @@ -25,7 +24,8 @@ import javax.swing.JTable; public class MainWindow implements ActionListener { private DbConnector dbCon; - private boolean userModeSave = true; + private boolean userModeEdit = false; + private int editId; private JFrame frame; private JTextField textField; @@ -42,6 +42,7 @@ public class MainWindow implements ActionListener { private UserTableModel userTableModel; private JScrollPane scrollUserList; private JPanel panelUserList; + private JButton btnUserCancel; /** @@ -100,17 +101,18 @@ public class MainWindow implements ActionListener { panelUser.add(panelUserList); panelUserList.setLayout(new BorderLayout(0, 0)); - userTable = new JTable(new UserTableModel(this.dbCon)); + userTableModel = new UserTableModel(this.dbCon); + userTable = new JTable(userTableModel); userTable.setFillsViewportHeight(true); - userTableModel = (UserTableModel)userTable.getModel(); - - TableButton userDeleteButton = new TableButton("Löschen", this.userTable, new UserDeleteListener(userTable)); - userTable.getColumn("Löschen").setCellEditor(userDeleteButton); - userTable.getColumn("Löschen").setCellRenderer(userDeleteButton); - TableButton userEditButton = new TableButton("Bearbeiten", this.userTable, new UserEditListener()); - userTable.getColumn("Bearbeiten").setCellEditor(userEditButton); - userTable.getColumn("Bearbeiten").setCellRenderer(userEditButton); + + UserDeleteTableButton userDeleteTableButton = new UserDeleteTableButton("Löschen", this.userTable); + userTable.getColumnModel().getColumn(4).setCellEditor(userDeleteTableButton); + userTable.getColumnModel().getColumn(4).setCellRenderer(userDeleteTableButton); + UserEditTableButton userEditTableButton = new UserEditTableButton("Bearbeiten", this.userTable, this); + userTable.getColumnModel().getColumn(3).setCellEditor(userEditTableButton); + userTable.getColumnModel().getColumn(3).setCellRenderer(userEditTableButton); + scrollUserList = new JScrollPane(userTable); panelUserList.add(scrollUserList); scrollUserList.setViewportBorder(null); @@ -138,12 +140,11 @@ public class MainWindow implements ActionListener { btnUserSave = new JButton("Speichern"); btnUserSave.addActionListener(this); - btnUserSave.setBounds(333, 58, 86, 20); + btnUserSave.setBounds(333, 27, 103, 20); lblUserStatus = new JLabel(""); lblUserStatus.setBounds(6, 89, 413, 14); - panelUserEdit.add(this.lblUserName); panelUserEdit.add(this.textFieldUserName); panelUserEdit.add(this.lblUserSurname); @@ -152,12 +153,48 @@ public class MainWindow implements ActionListener { panelUserEdit.add(this.btnUserSave); panelUserEdit.add(this.lblUserStatus); + btnUserCancel = new JButton("Abbrechen"); + btnUserCancel.setBounds(333, 57, 103, 23); + btnUserCancel.addActionListener(this); + panelUserEdit.add(btnUserCancel); + } + + public void setModeEditUser(int pId, String pName, String pSurname){ + this.userModeEdit = true; + this.editId = pId; + this.textFieldUserName.setText(pName); + this.textFieldUserSurname.setText(pSurname); } @Override public void actionPerformed(ActionEvent e) { if(e.getSource() == this.btnUserSave){ - if(this.userModeSave){ + if(this.userModeEdit){ + int re = this.userTableModel.editUser(this.editId, this.textFieldUserName.getText(), this.textFieldUserSurname.getText()); + + switch(re){ + case 0: + this.lblUserStatus.setText("Benutzer-ID \""+this.editId+"\" erfolgreich bearbeitet."); + this.textFieldUserName.setText(""); + this.textFieldUserSurname.setText(""); + break; + + case 1: + this.lblUserStatus.setText("SQL-Fehler. Benutzer konnte nicht bearbeitet werden."); + this.textFieldUserName.setText(""); + this.textFieldUserSurname.setText(""); + break; + + case 2: + this.lblUserStatus.setText("Entweder Vor- oder Nachname müssen ausgefüllt sein."); + break; + + } + + this.userModeEdit = false; + this.editId = 0; + } + else { int re = this.userTableModel.createUser(this.textFieldUserName.getText(), this.textFieldUserSurname.getText()); switch (re){ @@ -178,11 +215,11 @@ public class MainWindow implements ActionListener { break; } } - else { - // Hier kommt die Funktion rein, die Benutzer editieren lässt. - } - } - + if(e.getSource() == this.btnUserCancel){ + this.userModeEdit = false; + this.textFieldUserName.setText(""); + this.textFieldUserSurname.setText(""); + } } } diff --git a/src/de/katho/kBorrow/gui/TableButton.java b/src/de/katho/kBorrow/gui/TableButton.java deleted file mode 100644 index b27c02d..0000000 --- a/src/de/katho/kBorrow/gui/TableButton.java +++ /dev/null @@ -1,95 +0,0 @@ -package de.katho.kBorrow.gui; - -import java.awt.Component; -import java.awt.event.ActionListener; -import java.util.EventObject; - -import javax.swing.AbstractCellEditor; -import javax.swing.JButton; -import javax.swing.JTable; -import javax.swing.UIManager; -import javax.swing.event.CellEditorListener; -import javax.swing.table.TableCellEditor; -import javax.swing.table.TableCellRenderer; - -public class TableButton extends AbstractCellEditor implements TableCellRenderer, TableCellEditor { - private int selectedRow; - private int selectedColumn; - private JButton button; - private JTable parentTable; - private UserTableModel tModel; - /** - * - */ - private static final long serialVersionUID = 2605797435586840499L; - - public TableButton(String pLabel, JTable pTable, ActionListener listener){ - this.button = new JButton(pLabel); - this.parentTable = pTable; - this.tModel = (UserTableModel)this.parentTable.getModel(); - this.button.addActionListener(listener); - } - - @Override - public void addCellEditorListener(CellEditorListener arg0) { - } - - @Override - public void cancelCellEditing() { - } - - @Override - public Object getCellEditorValue() { - return ""; - } - - @Override - public boolean isCellEditable(EventObject arg0) { - return true; - } - - @Override - public void removeCellEditorListener(CellEditorListener arg0) { - - } - - @Override - public boolean shouldSelectCell(EventObject anEvent) { - return true; - } - - @Override - public boolean stopCellEditing() { - return true; - } - - @Override - public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { - selectedRow = row; - selectedColumn = column; - - if(isSelected){ - this.button.setForeground(table.getSelectionForeground()); - this.button.setBackground(table.getSelectionBackground()); - } - else { - this.button.setForeground(table.getForeground()); - this.button.setBackground(table.getBackground()); - } - - return this.button; - } - - @Override - public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int col) { - if (isSelected){ - this.button.setForeground(table.getSelectionForeground()); - this.button.setBackground(table.getSelectionBackground()); - } else { - this.button.setForeground(table.getForeground()); - this.button.setBackground(UIManager.getColor("Button.background")); - } - //this.button.setText((value == null) ? "" : value.toString()); - return this.button; - } -} diff --git a/src/de/katho/kBorrow/gui/UserDeleteListener.java b/src/de/katho/kBorrow/gui/UserDeleteListener.java deleted file mode 100644 index 1e810e7..0000000 --- a/src/de/katho/kBorrow/gui/UserDeleteListener.java +++ /dev/null @@ -1,24 +0,0 @@ -package de.katho.kBorrow.gui; - -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; - -import javax.swing.JTable; - -public class UserDeleteListener implements ActionListener { - - private JTable table; - private UserTableModel model; - - public UserDeleteListener(JTable pTable){ - this.table = pTable; - this.model = (UserTableModel)table.getModel(); - } - - public void actionPerformed(ActionEvent arg0) { - int row = table.getSelectedRow(); - - this.model.deleteUser(model.getUserId(row)); - } - -} diff --git a/src/de/katho/kBorrow/gui/UserDeleteTableButton.java b/src/de/katho/kBorrow/gui/UserDeleteTableButton.java new file mode 100644 index 0000000..efb426a --- /dev/null +++ b/src/de/katho/kBorrow/gui/UserDeleteTableButton.java @@ -0,0 +1,58 @@ +package de.katho.kBorrow.gui; + +import java.awt.Component; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +import javax.swing.AbstractCellEditor; +import javax.swing.JButton; +import javax.swing.JTable; +import javax.swing.table.TableCellEditor; +import javax.swing.table.TableCellRenderer; + +public class UserDeleteTableButton extends AbstractCellEditor implements TableCellRenderer, TableCellEditor { + + /** + * + */ + private static final long serialVersionUID = -886584066497429394L; + + private JButton buttonR; + private JButton buttonE; + private String label; + private JTable table; + private UserTableModel model; + + public UserDeleteTableButton(String pLabel, JTable pTable){ + this.label = pLabel; + this.table = pTable; + this.model = (UserTableModel) pTable.getModel(); + this.buttonR = new JButton(pLabel); + this.buttonE = new JButton(pLabel); + + this.buttonE.addActionListener(new ActionListener(){ + public void actionPerformed(ActionEvent e){ + fireEditingStopped(); + + int row = table.getSelectedRow(); + int id = model.getUserId(row); + + model.deleteUser(id); + } + }); + + } + + public Object getCellEditorValue() { + return this.label; + } + + public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { + return this.buttonE; + } + + public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { + return this.buttonR; + } + +} diff --git a/src/de/katho/kBorrow/gui/UserEditListener.java b/src/de/katho/kBorrow/gui/UserEditListener.java deleted file mode 100644 index c0c6663..0000000 --- a/src/de/katho/kBorrow/gui/UserEditListener.java +++ /dev/null @@ -1,13 +0,0 @@ -package de.katho.kBorrow.gui; - -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; - -public class UserEditListener implements ActionListener { - - @Override - public void actionPerformed(ActionEvent e) { - System.out.println("Edit"); - } - -} diff --git a/src/de/katho/kBorrow/gui/UserEditTableButton.java b/src/de/katho/kBorrow/gui/UserEditTableButton.java new file mode 100644 index 0000000..47a5a4a --- /dev/null +++ b/src/de/katho/kBorrow/gui/UserEditTableButton.java @@ -0,0 +1,59 @@ +package de.katho.kBorrow.gui; + +import java.awt.Component; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +import javax.swing.AbstractCellEditor; +import javax.swing.JButton; +import javax.swing.JTable; +import javax.swing.table.TableCellEditor; +import javax.swing.table.TableCellRenderer; + +public class UserEditTableButton extends AbstractCellEditor implements TableCellRenderer, TableCellEditor { + + /** + * + */ + private static final long serialVersionUID = -886584066497429394L; + + private JButton buttonR; + private JButton buttonE; + private String label; + private MainWindow mainwindow; + private UserTableModel model; + private JTable table; + + public UserEditTableButton(String pLabel, JTable pTable, MainWindow pMainWindow){ + this.label = pLabel; + this.table = pTable; + this.model = (UserTableModel)pTable.getModel(); + this.mainwindow = pMainWindow; + this.buttonR = new JButton(pLabel); + this.buttonE = new JButton(pLabel); + + this.buttonE.addActionListener(new ActionListener(){ + public void actionPerformed(ActionEvent e){ + fireEditingStopped(); + + int row = table.getSelectedRow(); + + mainwindow.setModeEditUser(model.getUserId(row), model.getUserName(row), model.getUserSurname(row)); + } + }); + + } + + public Object getCellEditorValue() { + return this.label; + } + + public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { + return this.buttonE; + } + + public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { + return this.buttonR; + } + +} diff --git a/src/de/katho/kBorrow/gui/UserTableModel.java b/src/de/katho/kBorrow/gui/UserTableModel.java index 9f8c15d..67c0632 100644 --- a/src/de/katho/kBorrow/gui/UserTableModel.java +++ b/src/de/katho/kBorrow/gui/UserTableModel.java @@ -14,8 +14,8 @@ public class UserTableModel extends AbstractTableModel { */ private static final long serialVersionUID = 435829735305533728L; private DbConnector dbCon; - private String[] header = {"Vorname", "Nachname", "Bearbeiten", "Löschen"}; - private ArrayList data; + private String[] header = {"ID", "Vorname", "Nachname", "", ""}; + private ArrayList data = new ArrayList(); public UserTableModel(DbConnector pDbCon){ this.dbCon = pDbCon; @@ -28,15 +28,25 @@ public class UserTableModel extends AbstractTableModel { } @Override - public int getRowCount() { + public int getRowCount() { return this.data.size(); } @Override public String getValueAt(int row, int col) { - if(col == 0) return this.data.get(row).getName(); - else if (col == 1) return this.data.get(row).getSurname(); - else return null; + switch(col){ + case 0: + return String.valueOf(this.data.get(row).getId()); + + case 1: + return this.data.get(row).getName(); + + case 2: + return this.data.get(row).getSurname(); + + default: + return null; + } } public String getColumnName(int index){ @@ -50,7 +60,7 @@ public class UserTableModel extends AbstractTableModel { // Die Funktion muss differenzierter werden public boolean isCellEditable(int row, int col){ - if (col > 1) return true; + if (col > 2) return true; return false; } @@ -67,8 +77,11 @@ public class UserTableModel extends AbstractTableModel { } public boolean deleteUser(int id){ - if (dbCon.deleteUser(id)){ - updateTable(); + if(dbCon.deleteUser(id)){ + int row = this.getRowFromId(id); + this.data.remove(row); + this.fireTableRowsDeleted(row, row); + return true; } return false; @@ -81,4 +94,32 @@ public class UserTableModel extends AbstractTableModel { return status; } + + public int editUser(int pId, String pName, String pSurname) { + int status = this.dbCon.editUser(pId, pName, pSurname); + + if(status == 0){ + int row = this.getRowFromId(pId); + + this.data.get(row).setName(pName); + this.data.get(row).setSurname(pSurname); + this.fireTableRowsUpdated(row, row); + } + + return status; + } + + /** + * + * @param pId + * @return Returns -1 if there is no row for the given id. + */ + private int getRowFromId(int pId){ + for(KUser elem : this.data){ + if(elem.getId() == pId) return data.indexOf(elem); + } + return -1; + } + + }