Hi.
Hab mich heute dran gewagt nen JButton in ne JTableModel Zelle einzubauen, funktioniert auch soweit, nur is das Verhalten beim Klicken auf den obersten Button (dort wo reihe 0 und column X ist) falsch.
Hab mich an das Tutorial hier gehalten.
Für die JButton Columns setze ich nen eigenen "MyBtnRenderer"(ext. JButton impl. TableCellRenderer) und nen eigenen "MyBtnEditor"(ext. DefaultCellEditor)
Hier mein Editor:
Und hier mein Renderer:
Diese weise ich JButton Klassen zu bei meiner "MyTable" Klasse:
Mein "MyTableModel" ist folgend:
Da ich mit keinen gewöhnlichen Typen arbeite und die befüllte Tabelle hier schlecht nachproduzieren kann wenigstens nen Screenshot:
So sieht alles nach der Initialisierung aus:
Hier funkionieren alle buttons richtig, mit Ausgabe bei nem Klick, gewohnter Animation etc. BIS auf den obersten in der ersten Zeile.
Wenn man auf den klickt passiert das hier:
Und nachfolgend sind auch alle anderen Buttons dann kaputt, wenn man die dann anklickt kommt auch entweder der übergebene TitleString oder die toString(). Jegliche Listener etc. reagieren nicht.
Die JButtons werden bei den Zeilenvectoren einfach immer am Ende mit drangehängt:
und die kommen in die DataMatrix(Vector<Vector>) welche das TableModel bekommt.
Hat jemand ne Ahnung wo der Fehler liegen könnte?
Hab mich heute dran gewagt nen JButton in ne JTableModel Zelle einzubauen, funktioniert auch soweit, nur is das Verhalten beim Klicken auf den obersten Button (dort wo reihe 0 und column X ist) falsch.
Hab mich an das Tutorial hier gehalten.
Für die JButton Columns setze ich nen eigenen "MyBtnRenderer"(ext. JButton impl. TableCellRenderer) und nen eigenen "MyBtnEditor"(ext. DefaultCellEditor)
Hier mein Editor:
Java:
public class MyBtnEditor extends DefaultCellEditor {
private JButton btn;
private String text;
private boolean isPushed;
public MyBtnEditor(JCheckBox checkBox, String text) {
super(checkBox);
this.text = text;
btn = new JButton();
btn.setOpaque(true);
btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
fireEditingStopped();
}
});
}
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
btn.setText(text);
isPushed = true;
return btn;
}
public Object getCellEditorValue() {
if (isPushed) {
System.out.println("Ehh~ Sugoi desu ne!");
}
isPushed = false;
return text;
}
public boolean stopCellEditing() {
isPushed = false;
return super.stopCellEditing();
}
protected void fireEditingStopped() {
super.fireEditingStopped();
}
}
Und hier mein Renderer:
Java:
public class MyBtnRenderer extends JButton implements TableCellRenderer {
private String text;
public MyBtnRenderer(String text) {
setOpaque(true);
this.text = text;
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
int row, int column) {
setText(text);
return this;
}
}
Diese weise ich JButton Klassen zu bei meiner "MyTable" Klasse:
Java:
public class MyTable extends JTable {
public MyTable(MyTableModel model) {
super(model);
setDefaultRenderer(JButton.class, new MyBtnRenderer("Save"));
setDefaultEditor(JButton.class, new MyBtnEditor(new JCheckBox(), "Save"));
}
}
Mein "MyTableModel" ist folgend:
Java:
public class MyTableModel extends DefaultTableModel {
public MyTableModel(Vector dataMatrix, Vector<String> columnIdentifiers){
super(dataMatrix, columnIdentifiers);
}
public Class<?> getColumnClass(int col){
Object val = getValueAt(0,col);
return val.getClass();
}
public boolean isCellEditable(boolean value){
return true;
}
@Override
public Object getValueAt(int row, int column) {
Vector v = (Vector) dataVector.get(row);
return v.get(column);
}
}
Da ich mit keinen gewöhnlichen Typen arbeite und die befüllte Tabelle hier schlecht nachproduzieren kann wenigstens nen Screenshot:
So sieht alles nach der Initialisierung aus:

Hier funkionieren alle buttons richtig, mit Ausgabe bei nem Klick, gewohnter Animation etc. BIS auf den obersten in der ersten Zeile.
Wenn man auf den klickt passiert das hier:

Und nachfolgend sind auch alle anderen Buttons dann kaputt, wenn man die dann anklickt kommt auch entweder der übergebene TitleString oder die toString(). Jegliche Listener etc. reagieren nicht.

Die JButtons werden bei den Zeilenvectoren einfach immer am Ende mit drangehängt:
Java:
vector.add(new JButton());
und die kommen in die DataMatrix(Vector<Vector>) welche das TableModel bekommt.
Hat jemand ne Ahnung wo der Fehler liegen könnte?