Guten Tag,
ich habe eine JTable und ein Tablemodel. In der JTable befindet sich ein JButton der einen Celleditor besitzt. Wenn ich nun den JButton klicke öffnet sich ein Fenster aber ich kann nach dem schließen des Fensters nichts mehr in der JTable anklicken (Markierung funktioniert nicht mehr). Woran könnte so etwas liegen?
Celleditor
Tablemodel
Mit freundlichen Grüßen
Patrick
ich habe eine JTable und ein Tablemodel. In der JTable befindet sich ein JButton der einen Celleditor besitzt. Wenn ich nun den JButton klicke öffnet sich ein Fenster aber ich kann nach dem schließen des Fensters nichts mehr in der JTable anklicken (Markierung funktioniert nicht mehr). Woran könnte so etwas liegen?
Celleditor
Java:
class TableCellEditor_JButton extends AbstractCellEditor implements TableCellEditor{
JButton button;
String txt;
public TableCellEditor_JButton() {
super();
button = new JButton();
button.setOpaque(true);
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("Buttontext: " + button.getText());
}
});
}
public Object getCellEditorValue() {
return null;
}
public boolean isCellEditable(EventObject anEvent) {
return true;
}
public boolean shouldSelectCell(EventObject anEvent) {
return false;
}
public boolean stopCellEditing() {
return super.stopCellEditing();
}
public void cancelCellEditing() {
}
public void addCellEditorListener(CellEditorListener l) {
}
public void removeCellEditorListener(CellEditorListener l) {
}
public Component getTableCellEditorComponent(JTable table, Object value,boolean isSelected, int row, int column) {
txt = (value == null) ? "" : value.toString();
button.setText(txt);
return (JButton)value;
}
}
Tablemodel
Java:
public class TableModel_Zuweisung implements TableModel {
Vector<Vector> data = null;
Vector rows = null;
private Vector<TableModelListener> listener = null;
Class_SQLCon sql = null;
int kameraMode = 0;
private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(TableModel_Zuweisung.class);
JPanel_BereichZuweisung zuw= null;
public TableModel_Zuweisung(Class_SQLCon sql, int kameraMode,JPanel_BereichZuweisung zuw) {
this.sql = sql;
this.kameraMode = kameraMode;
this.zuw=zuw;
data = new Vector<Vector>();
rows = new Vector();
listener = new Vector<TableModelListener>();
}
public void updateData(Vector v2) {
//data.removeAllElements();
data = v2;
fireTableModelChanged();
}
@Override
public int getRowCount() {
return data.size();
}
@Override
public int getColumnCount() {
return 5;
}
@Override
public String getColumnName(int column) {
switch (column) {
case 0:
return "Transp. ID";
case 1:
return "Transp. Alias";
case 2:
return "Detail";
case 3:
return "-->";
case 4:
if (kameraMode == 1) {
return "Antennen ID";
} else if (kameraMode == 2) {
return "Bereich ID";
}
case 5:
if (kameraMode == 1) {
return "Antennen Bez.";
} else if (kameraMode == 2) {
return "Bereich Bez.";
}
default:
return null;
}
}
@Override
public Class<?> getColumnClass(int columnIndex) {
switch (columnIndex) {
case 0:
return JLabel.class;
case 1:
return JLabel.class;
case 2:
return JButton.class;
case 3:
return JLabel.class;
case 4:
return JLabel.class;
case 5:
return JLabel.class;
default:
return null;
}
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
if (columnIndex == 2) {
return true;
} else {
return false;
}
}
@Override
public Object getValueAt(final int rowIndex, int columnIndex) {
rows = data.get(rowIndex);
switch (columnIndex) {
case 0:
return new JLabel((String) rows.get(0));
case 1:
return new JLabel((String) rows.get(1));
case 2:
JButton transpDet = new JButton(new ImageIcon(getClass().getResource("/resources/Testen.png")));
transpDet.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
String transp_id = ((JLabel) TableModel_Zuweisung.this.getValueAt(rowIndex, 0)).getText();
JDialog_TransponderDetail td = new JDialog_TransponderDetail(transp_id, sql,zuw);
td.setVisible(true);
} catch (Exception ex) {
ex.printStackTrace();
}
}
});
return transpDet;
case 3:
if (rows.get(2) == null) {
return new JLabel("#,255,255,255");
} else {
return new JLabel((String) rows.get(2));
}
case 4:
return new JLabel((String) rows.get(3));
case 5:
return new JLabel((String) rows.get(4));
default:
return null;
}
}
@Override
public void setValueAt(Object o, int i, int i1) {
}
@Override
public void addTableModelListener(TableModelListener l) {
listener.add(l);
}
@Override
public void removeTableModelListener(TableModelListener l) {
listener.remove(l);
}
public void fireTableModelChanged() {
for (TableModelListener l : listener) {
l.tableChanged(new TableModelEvent(this));
}
}
}
Mit freundlichen Grüßen
Patrick