Code:
public void select_types (String[] types){
//Dialogbox Abmessungen
int xsize = 260;
int ysize = 500;
//JDialog erstellen
JDialog check_error = new JDialog(this,"Anzuzeigende Dateitypen wählen ...",true);
//Daten Object anlegen; 1 Spalte: vorkommende Dateitypen; 2 Spalte: auswahl
Object[][] data = new Object[types.length][2];
for (int i=0; i<types.length; i++){
data[i][0] = (String)types[i];
data[i][1] = new Boolean(false);
}
//Tabellenkopf
String[] columnames={"Typ","?"};
//JPanel erstellen, in diesem werden die Elemente (JTable, JScroll, ...) eingebettet
JPanel dpanel = new JPanel();
XYLayout xYLayoutd = new XYLayout();
dpanel.setLayout(xYLayoutd);
JScrollPane typPane1 = new JScrollPane();
dpanel.add(typPane1, new XYConstraints(30, 20, 200, 400));
JTable typTable = new JTable(data,columnames);
// Cell Editor
TableColumn zweite_spalte = typTable.getColumnModel().getColumn(1);
JCheckBox jCheckBox = new JCheckBox();
zweite_spalte.setCellEditor(new DefaultCellEditor(jCheckBox));
/* Versuch Cell-Renderer
typTable.getColumn("?").setCellRenderer(new DefaultTableCellRenderer(){
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
JCheckBox jCheckBox = (JCheckBox)super.getTableCellRendererComponent(
table, value, isSelected, hasFocus,
row, column);
return jCheckBox;
}
}
);
*/
typPane1.getViewport().add(typTable, null);
check_error.getContentPane().add(dpanel);
check_error.setSize(xsize, ysize);
check_error.setLocation(100, 100);
check_error.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
check_error.setVisible(true);
}
Ich habe mit dem anzeigen der Checkbox in der 2-spalte der JTable ein Problem. Der Cell-Editor hat sich ja problemlos implementieren lassen, dadurch wird die checkbox aber nur beianklicken der Zelle (also in folge einer Wertänderung) kurz sichtbar. Danach steht wieder "true" oder "false" in der Zelle.
Ich möchte aber das die Checkbox immer angezeigt wird, auch wenn die zelle nicht gerade angeklickt wird. Hab mich schon ein wenig in der Literatur umgesehen und glaube das das mit einen Renderer geht.
Aber irgendwie klappt das nicht ganz.
Wäre super wenn mir wer den code ausbessern könnte
thx