Benutzer können jetzt fehlerfrei gelöscht und bearbeitet werden. Es

treten keine Fehler mehr bei der Anzeige der Tabellenbuttons auf.
This commit is contained in:
socrates
2014-10-10 02:10:26 +02:00
parent a29da59a11
commit e4149d42e6
11 changed files with 255 additions and 160 deletions

View File

@@ -22,4 +22,12 @@ public class KUser {
public int getId(){ public int getId(){
return this.id; return this.id;
} }
public void setName(String pName){
this.name = pName;
}
public void setSurname(String pSurname){
this.surname = pSurname;
}
} }

View File

@@ -9,5 +9,6 @@ public interface DbConnector {
public int createUser(String pName, String pSurname); public int createUser(String pName, String pSurname);
public ArrayList<KUser> getUserList(); public ArrayList<KUser> getUserList();
public boolean deleteUser(int id); public boolean deleteUser(int id);
public int editUser(int pId, String pName, String pSurname);
} }

View File

@@ -29,4 +29,10 @@ public class SqlConnector implements DbConnector{
return false; return false;
} }
@Override
public int editUser(int pId, String pName, String pSurname) {
// TODO Auto-generated method stub
return 0;
}
} }

View File

@@ -239,4 +239,21 @@ public class SqliteConnector implements DbConnector {
} }
} }
@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;
}
}
} }

View File

@@ -1,6 +1,5 @@
package de.katho.kBorrow.gui; package de.katho.kBorrow.gui;
import javax.swing.JCheckBox;
import javax.swing.JFrame; import javax.swing.JFrame;
import javax.swing.JTabbedPane; import javax.swing.JTabbedPane;
import javax.swing.UIManager; import javax.swing.UIManager;
@@ -25,7 +24,8 @@ import javax.swing.JTable;
public class MainWindow implements ActionListener { public class MainWindow implements ActionListener {
private DbConnector dbCon; private DbConnector dbCon;
private boolean userModeSave = true; private boolean userModeEdit = false;
private int editId;
private JFrame frame; private JFrame frame;
private JTextField textField; private JTextField textField;
@@ -42,6 +42,7 @@ public class MainWindow implements ActionListener {
private UserTableModel userTableModel; private UserTableModel userTableModel;
private JScrollPane scrollUserList; private JScrollPane scrollUserList;
private JPanel panelUserList; private JPanel panelUserList;
private JButton btnUserCancel;
/** /**
@@ -100,16 +101,17 @@ public class MainWindow implements ActionListener {
panelUser.add(panelUserList); panelUser.add(panelUserList);
panelUserList.setLayout(new BorderLayout(0, 0)); 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); userTable.setFillsViewportHeight(true);
userTableModel = (UserTableModel)userTable.getModel();
TableButton userDeleteButton = new TableButton("L<EFBFBD>schen", this.userTable, new UserDeleteListener(userTable)); UserDeleteTableButton userDeleteTableButton = new UserDeleteTableButton("L<EFBFBD>schen", this.userTable);
userTable.getColumn("L<EFBFBD>schen").setCellEditor(userDeleteButton); userTable.getColumnModel().getColumn(4).setCellEditor(userDeleteTableButton);
userTable.getColumn("L<EFBFBD>schen").setCellRenderer(userDeleteButton); userTable.getColumnModel().getColumn(4).setCellRenderer(userDeleteTableButton);
TableButton userEditButton = new TableButton("Bearbeiten", this.userTable, new UserEditListener());
userTable.getColumn("Bearbeiten").setCellEditor(userEditButton); UserEditTableButton userEditTableButton = new UserEditTableButton("Bearbeiten", this.userTable, this);
userTable.getColumn("Bearbeiten").setCellRenderer(userEditButton); userTable.getColumnModel().getColumn(3).setCellEditor(userEditTableButton);
userTable.getColumnModel().getColumn(3).setCellRenderer(userEditTableButton);
scrollUserList = new JScrollPane(userTable); scrollUserList = new JScrollPane(userTable);
panelUserList.add(scrollUserList); panelUserList.add(scrollUserList);
@@ -138,12 +140,11 @@ public class MainWindow implements ActionListener {
btnUserSave = new JButton("Speichern"); btnUserSave = new JButton("Speichern");
btnUserSave.addActionListener(this); btnUserSave.addActionListener(this);
btnUserSave.setBounds(333, 58, 86, 20); btnUserSave.setBounds(333, 27, 103, 20);
lblUserStatus = new JLabel(""); lblUserStatus = new JLabel("");
lblUserStatus.setBounds(6, 89, 413, 14); lblUserStatus.setBounds(6, 89, 413, 14);
panelUserEdit.add(this.lblUserName); panelUserEdit.add(this.lblUserName);
panelUserEdit.add(this.textFieldUserName); panelUserEdit.add(this.textFieldUserName);
panelUserEdit.add(this.lblUserSurname); panelUserEdit.add(this.lblUserSurname);
@@ -152,12 +153,48 @@ public class MainWindow implements ActionListener {
panelUserEdit.add(this.btnUserSave); panelUserEdit.add(this.btnUserSave);
panelUserEdit.add(this.lblUserStatus); 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 @Override
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
if(e.getSource() == this.btnUserSave){ 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<65>llt sein.");
break;
}
this.userModeEdit = false;
this.editId = 0;
}
else {
int re = this.userTableModel.createUser(this.textFieldUserName.getText(), this.textFieldUserSurname.getText()); int re = this.userTableModel.createUser(this.textFieldUserName.getText(), this.textFieldUserSurname.getText());
switch (re){ switch (re){
@@ -178,11 +215,11 @@ public class MainWindow implements ActionListener {
break; 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("");
}
} }
} }

View File

@@ -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;
}
}

View File

@@ -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));
}
}

View File

@@ -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;
}
}

View File

@@ -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");
}
}

View File

@@ -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;
}
}

View File

@@ -14,8 +14,8 @@ public class UserTableModel extends AbstractTableModel {
*/ */
private static final long serialVersionUID = 435829735305533728L; private static final long serialVersionUID = 435829735305533728L;
private DbConnector dbCon; private DbConnector dbCon;
private String[] header = {"Vorname", "Nachname", "Bearbeiten", "L<EFBFBD>schen"}; private String[] header = {"ID", "Vorname", "Nachname", "", ""};
private ArrayList<KUser> data; private ArrayList<KUser> data = new ArrayList<KUser>();
public UserTableModel(DbConnector pDbCon){ public UserTableModel(DbConnector pDbCon){
this.dbCon = pDbCon; this.dbCon = pDbCon;
@@ -34,9 +34,19 @@ public class UserTableModel extends AbstractTableModel {
@Override @Override
public String getValueAt(int row, int col) { public String getValueAt(int row, int col) {
if(col == 0) return this.data.get(row).getName(); switch(col){
else if (col == 1) return this.data.get(row).getSurname(); case 0:
else return null; 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){ public String getColumnName(int index){
@@ -50,7 +60,7 @@ public class UserTableModel extends AbstractTableModel {
// Die Funktion muss differenzierter werden // Die Funktion muss differenzierter werden
public boolean isCellEditable(int row, int col){ public boolean isCellEditable(int row, int col){
if (col > 1) return true; if (col > 2) return true;
return false; return false;
} }
@@ -68,7 +78,10 @@ public class UserTableModel extends AbstractTableModel {
public boolean deleteUser(int id){ public boolean deleteUser(int id){
if(dbCon.deleteUser(id)){ if(dbCon.deleteUser(id)){
updateTable(); int row = this.getRowFromId(id);
this.data.remove(row);
this.fireTableRowsDeleted(row, row);
return true; return true;
} }
return false; return false;
@@ -81,4 +94,32 @@ public class UserTableModel extends AbstractTableModel {
return status; 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;
}
} }