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(){
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 ArrayList<KUser> getUserList();
public boolean deleteUser(int id);
public int editUser(int pId, String pName, String pSurname);
}

View File

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

View File

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

View File

@@ -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<EFBFBD>schen", this.userTable, new UserDeleteListener(userTable));
userTable.getColumn("L<EFBFBD>schen").setCellEditor(userDeleteButton);
userTable.getColumn("L<EFBFBD>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<EFBFBD>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<65>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("");
}
}
}

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 DbConnector dbCon;
private String[] header = {"Vorname", "Nachname", "Bearbeiten", "L<EFBFBD>schen"};
private ArrayList<KUser> data;
private String[] header = {"ID", "Vorname", "Nachname", "", ""};
private ArrayList<KUser> data = new ArrayList<KUser>();
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;
}
}