Hallo,
nach langer Recherche habe ich herausgefunden, wie ich in meiner Tabelle die Checkboxen anklicken kann. Nur leider ist das nicht von dauer, sobald ich die nächste Checkbox anklicke wird die erste wieder zurückgesetzt.
Was mache ich noch falsch? Hat jemand einen Tip für mich?
Gruß
E.
Hier der Code:
nach langer Recherche habe ich herausgefunden, wie ich in meiner Tabelle die Checkboxen anklicken kann. Nur leider ist das nicht von dauer, sobald ich die nächste Checkbox anklicke wird die erste wieder zurückgesetzt.
Was mache ich noch falsch? Hat jemand einen Tip für mich?
Gruß
E.
Hier der Code:
Code:
package test; import java.awt.Dimension; import javax.swing.JFrame; import javax.swing.JTable; import javax.swing.table.TableColumn; public class JTableDemo extends Thread { private JFrame frame; JTable tbl; MyAbstractTableModel myTableModel; TableColumn tc; public JTableDemo() { frame = new JFrame("Sync V1.4 by www.ek74.com"); myTableModel = new MyAbstractTableModel(); tbl = new JTable(); tbl.setModel(myTableModel); tc = tbl.getColumnModel().getColumn(1); tc.setCellEditor(new MyCheckboxTableCellEditor()); frame.add(tbl); frame.setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); frame.setMinimumSize(new Dimension(300, 500)); } public void start() { myTableModel.addRow("Name1", false); myTableModel.addRow("Name2", false); myTableModel.addRow("Name3", false); myTableModel.addRow("Name4", false); myTableModel.addRow("Name5", false); myTableModel.addRow("Name6", false); frame.setVisible(true); } }
Code:
package test; import java.awt.Component; import javax.swing.AbstractCellEditor; import javax.swing.JCheckBox; import javax.swing.JTable; import javax.swing.table.TableCellEditor; @SuppressWarnings("serial") public class MyCheckboxTableCellEditor extends AbstractCellEditor implements TableCellEditor { JCheckBox check; public MyCheckboxTableCellEditor() { check = new JCheckBox(); check.setOpaque(false); check.setHorizontalAlignment(JCheckBox.CENTER); } // This method is called when editing is completed // It must return the new value to be stored in the cell public Object getCellEditorValue() { check.setSelected(!check.isSelected()); return check.isSelected(); } // This Component is called when a cell value is edited by the user public Component getTableCellEditorComponent(JTable tbl, Object value, boolean isSelected, int r, int c) { return check; } }
Code:
package test; import java.util.ArrayList; import java.util.List; import javax.swing.table.AbstractTableModel; @SuppressWarnings("serial") public class MyAbstractTableModel extends AbstractTableModel { private static final String[] HEADER = { "Name", "Freigabe" }; private List<Datensatz> liste; public MyAbstractTableModel() { liste = new ArrayList<Datensatz>(); fireTableDataChanged(); } public void clear() { liste.clear(); fireTableDataChanged(); } public void addRow(String name, boolean check) { liste.add(new Datensatz(name, check)); fireTableDataChanged(); } public void removeRow(int r) { liste.remove(r); fireTableDataChanged(); } @Override public int getColumnCount() { return HEADER.length; } @Override public int getRowCount() { return liste.size(); } @Override public String getColumnName(int c) { return HEADER[c]; } public void setValueAt(int r, int c, boolean check) { Datensatz satz = liste.get(r); if (c== 6) { check = !check; satz.setCheck(check); } } @Override public Object getValueAt(int r, int c) { Datensatz satz = liste.get(r); switch (c) { case 0: return satz.getName(); case 1: return satz.isChecked(); default: return null; } } public boolean isCellEditable(int r, int c) { if (c == 1) return true; return false; } public Class<?> getColumnClass(int c) { if (c == 1) { return Boolean.class; } return String.class; } public class Datensatz { private String name; private boolean check; public Datensatz(String name, boolean check) { this.name = name; this.setCheck(check); } public String getName() { return name; } public void setName(String name) { this.name = name; } public boolean isChecked() { return check; } public void setCheck(boolean check) { this.check = check; } } }
Code:
package test; public class Start { public static void main(String[] args) { JTableDemo demo = new JTableDemo(); demo.start(); } }
Comment