K
kriizz
Gast
Hallo...
ich hab nun echt keine Ahnung mehr wie ich das machen muss...
Mein Problem ist, dass ich Buttons in einer Tabelle habe.
Wenn ich auf den Button klicke, öffnet sich ein JOptionPane mit einer Abfrage ob man den Benutzer löschen möchte.
Dies ist alles kein Problem.. diese Methoden funktionieren so wie sie es sollen.
Nun soll, nach dem beim OP auf ja geklickt wurde und der Benutzer aus der DB gelöscht worden ist, die Tabelle aktualisiert werden, sodass der gelöschte Mitarbeiter nicht mehr drin steht.
Da hab ich nun schon mit setValueAt, Listenern etc rumprobiert.. ich bin zu doof dazu ^^
kann mri jemand helfen?
Hier der bereinigte Code, in der getCellEditorValue wird das JOptionPane ausgeführt.
ich hab nun echt keine Ahnung mehr wie ich das machen muss...
Mein Problem ist, dass ich Buttons in einer Tabelle habe.
Wenn ich auf den Button klicke, öffnet sich ein JOptionPane mit einer Abfrage ob man den Benutzer löschen möchte.
Dies ist alles kein Problem.. diese Methoden funktionieren so wie sie es sollen.
Nun soll, nach dem beim OP auf ja geklickt wurde und der Benutzer aus der DB gelöscht worden ist, die Tabelle aktualisiert werden, sodass der gelöschte Mitarbeiter nicht mehr drin steht.
Da hab ich nun schon mit setValueAt, Listenern etc rumprobiert.. ich bin zu doof dazu ^^
kann mri jemand helfen?
Hier der bereinigte Code, in der getCellEditorValue wird das JOptionPane ausgeführt.
Code:
package employees;
import java.awt.*;
import java.awt.event.*;
import javax.swing.JButton;
import javax.swing.border.*;
import javax.swing.ImageIcon;
import javax.swing.JTable;
import javax.swing.event.TableModelEvent;
import javax.swing.table.TableCellRenderer;
import javax.swing.JScrollPane;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.TableModelListener;
import javax.swing.table.*;
/**
*
* @author Administrator
*/
public class EmployeeEditGui extends JPanel {
static Color color = new Color(255,220,164);
static String[][] datenString = EmployeeEditData.selectData();
static Object[][] daten = fillConent();
public static Object[][] fillConent() {
int anz = 0;
for(int i = 0; i< datenString.length; i++) {
anz++;
}
Object[][] tableData = new Object[anz][3];
for(int j = 0; j<anz; j++) {
tableData[j][0] = datenString[j][1] + "," + datenString[j][0];
tableData[j][1] = datenString[j][2];
tableData[j][2] = datenString[j][2];
}
return tableData;
}
private static class ButtonColumnEditor extends AbstractCellEditor implements TableCellEditor {
private JButton theButton;
public ButtonColumnEditor() {
super();
theButton = new JButton();
theButton.setHorizontalAlignment(SwingConstants.LEFT);
theButton.setHorizontalTextPosition(SwingConstants.LEFT);
theButton.setPreferredSize(new Dimension(10,10));
theButton.setBorderPainted(false);
theButton.setOpaque(true);
theButton.setBackground(Color.WHITE);
theButton.setContentAreaFilled(false);
theButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
fireEditingStopped();
}
});
}
public Component getTableCellEditorComponent(JTable table, Object obj, boolean isSelected, int row, int col) {
Boolean lValueAsBoolean = (Boolean)obj;
theButton.setSelected(lValueAsBoolean.booleanValue());
Object[][] ma = daten;
theButton.setActionCommand(row+"|"+col);
return theButton;
}
public Object getCellEditorValue() {
String rowString = theButton.getActionCommand().substring(0, theButton.getActionCommand().indexOf("|"));
int row = Integer.valueOf(rowString).intValue();
String colString = theButton.getActionCommand().substring(theButton.getActionCommand().indexOf("|")+1);
int col = Integer.valueOf(colString).intValue();
String firstname = datenString[row][0];
String surname = datenString[row][1];
String directdialing = datenString[row][3];
String email = datenString[row][2];
String userid = datenString[row][4];
if(col == 2) {
int dialog = JOptionPane.showConfirmDialog(null, firstname+" "+surname+" wirklich löschen?","Löschen?",JOptionPane.YES_NO_OPTION);
if(dialog == JOptionPane.YES_OPTION) {
EmployeeEditData.deleteEmployee(userid,firstname+" "+surname);
}
// Hier brauche ich noch eine Methode, die die Tabelle updated...
} else {
JOptionPane.showMessageDialog(null,new EmployeeEditInsertGui(firstname,surname,directdialing,email),"MA",JOptionPane.PLAIN_MESSAGE);
}
return new Boolean(theButton.isSelected());
}
}
private static class ButtonColumnRenderer extends JButton implements TableCellRenderer {
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
if (value == null) {
this.setSelected(false);
}
Boolean ValueAsBoolean = (Boolean)value;
this.setSelected(ValueAsBoolean.booleanValue());
if(column == 1){
this.setIcon(new ImageIcon("src\\employees\\bearbeiten.gif"));
this.setToolTipText("bearbeiten");
} else {
this.setIcon(new ImageIcon("src\\employees\\loeschen.png"));
this.setToolTipText("löschen");
}
this.setHorizontalAlignment(SwingConstants.LEFT);
this.setHorizontalTextPosition(SwingConstants.LEFT);
this.setPreferredSize(new Dimension(10,10));
this.setBorderPainted(false);
this.setOpaque(true);
if(row%2 == 0) {
this.setBackground(Color.WHITE);
} else {
this.setBackground(color);
}
this.setContentAreaFilled(false);
return this;
}
}
public class DefaultCellRenderer extends JLabel implements TableCellRenderer {
public Component getTableCellRendererComponent( JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column )
{
this.setText(""+value);
this.setOpaque(true);
//table.setRowHeight(row,100);
if(row%2 == 0) {
this.setBackground(Color.WHITE);
} else {
this.setBackground(color);
}
return this;
}
}
private static class MyTableModel extends AbstractTableModel {
private String[] columnNames = {"Mitarbeiter", "bearbeiten", "löschen"};
private Object[][] data = daten;
private int selectedIndex = -1;
public Object getValueAt(int rowIndex, int columnIndex) {
if (columnIndex == 1 || columnIndex == 2) {
return new Boolean(rowIndex == selectedIndex);
} else {
return data[rowIndex][columnIndex];
}
}
public int getColumnCount() {
return columnNames.length;
}
public int getRowCount() {
return data.length;
}
public boolean isCellEditable(int rowIndex, int columnIndex) {
if(columnIndex == 1 || columnIndex == 2) {
return true;
} else {
return false;
}
}
public Class getColumnClass(int c) {
if (c == 1 || c == 2) return Boolean.class;
return String.class;
}
public String getColumnName(int column) {
return columnNames[column];
}
public void setValueAt(Object value, int row, int col) {
if (col == 1 || col == 2) {
int oldIndex = selectedIndex;
selectedIndex = row;
if (oldIndex != -1) {
fireTableCellUpdated(oldIndex, col);
}
fireTableCellUpdated(row, col);
} else {
data[row][col] = value;
fireTableCellUpdated(row, col);
}
}
}
final EmployeeEditGui EmployeeEdit = this ;
public EmployeeEditGui() {
Border border = new LineBorder(Color.BLACK);
TableModel myModel = new MyTableModel();
JTable table = new JTable(myModel);
//table.setPreferredScrollableViewportSize(new Dimension(500, 70));
JScrollPane scrollPane = new JScrollPane(table);
table.setPreferredScrollableViewportSize(new Dimension(500,300));
table.setShowVerticalLines(false);
table.getColumnModel().getColumn(2).setCellRenderer(new ButtonColumnRenderer());
table.getColumnModel().getColumn(2).setCellEditor(new ButtonColumnEditor());
table.getColumnModel().getColumn(1).setCellRenderer(new ButtonColumnRenderer());
table.getColumnModel().getColumn(1).setCellEditor(new ButtonColumnEditor());
table.getColumnModel().getColumn(0).setCellRenderer(new DefaultCellRenderer());
table.getColumnModel().getColumn(1).setMaxWidth(30);
table.getColumnModel().getColumn(2).setMaxWidth(30);
JTableHeader header = table.getTableHeader();
header.setVisible(false);
scrollPane.setHorizontalScrollBarPolicy(scrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
add(scrollPane);
}
}