R
Roar
Gast
Hallo,
hab ne JTable mit buttons drin. funtkioniert auch soweit so gut, nur ist das klickverhalten komisch:
wenn ich einmal auf einen button klicke geht er nicht. wenn ich dann nochmal auf ihn klicke gehts. nachdem ich auf einen button zweimal geklickt hab gehen auch die anderen ohne probleme.
hier code:
so. kA worans liegt. hab auch shcon versuch im renderer und/oder im editor dem button den focus zu geben, bzw. setFocusable(false); zu setzen aber rennt alles nix.
danke
Roar
hab ne JTable mit buttons drin. funtkioniert auch soweit so gut, nur ist das klickverhalten komisch:
wenn ich einmal auf einen button klicke geht er nicht. wenn ich dann nochmal auf ihn klicke gehts. nachdem ich auf einen button zweimal geklickt hab gehen auch die anderen ohne probleme.
hier code:
Code:
// der renderer
private class UpdateCellRenderer extends DefaultTableCellRenderer {
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
if(value instanceof JButton) {
JButton button = (JButton) value;
return button;
} else if(value instanceof JLabel) {
super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
setText(((JLabel) value).getText());
return this;
} else {
return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
}
}
}
// der editor:
private class UpdateCellEditor extends AbstractCellEditor implements TableCellEditor {
Component editorComponent = new JButton("BLA");
public UpdateCellEditor() {
}
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
if(value instanceof JButton) {
JButton button = (JButton) value;
editorComponent = button;
return editorComponent;
} else {
editorComponent = new JLabel(value.toString());
return editorComponent;
}
}
public Object getCellEditorValue() {
return editorComponent;
}
public boolean isCellEditable(EventObject eo) {
JTable t = (JTable) eo.getSource();
return t.getSelectedColumn() == t.getColumnCount()-1;
}
public Component getComponent() {
return editorComponent;
}
}
// table initialisierung
Vector rows = new Vector();
for(int i=0; i<updates.size(); i++) {
Storable s = (Storable) updates.elementAt(i);
Vector row = new Vector();
row.add(s instanceof StorableDashboard ? "Dashboard" : (s instanceof StorablePlugin ? "Plugin": "unknown"));
row.add(s.getName());
row.add(s.getVersion());
row.add(new SimpleDateFormat("dd.MM.yyyy HH:mm").format(new Date(s.getDate())));
row.add(s.getLocation());
JButton dlbut = new JButton("Download"); // der button
dlbut.setActionCommand("dl"+i); // blah blah
dlbut.addActionListener(this); // jojo
row.add(dlbut); // patsch
rows.add(row); // pflock
}
Vector cols = new Vector();
cols.add("Type");
cols.add("Name");
cols.add("Version");
cols.add("Date");
cols.add("URL");
cols.add("Download");
tab = new JTable(rows, cols);
tab.setDefaultRenderer(Object.class, new UpdateCellRenderer()); // renderer reinschubbsen
tab.setDefaultEditor(Object.class, new UpdateCellEditor()); // und den editor hinterher
tab.getTableHeader().setReorderingAllowed(false); // bliblablo
tab.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); // schubi
TableColumnModel cm = tab.getColumnModel(); // *yawns*
TableColumn tc = cm.getColumn(0);
tc.setPreferredWidth(90);
tc = cm.getColumn(1);
// blaaaa
tab.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); // yup
this.add(new JScrollPane(tab), BorderLayout.CENTER);
so. kA worans liegt. hab auch shcon versuch im renderer und/oder im editor dem button den focus zu geben, bzw. setFocusable(false); zu setzen aber rennt alles nix.
danke
Roar