Hallo liebes Forum,
Ich habe eine JTable, welche Beschriftungen in der linken Spalte, und verschiedene JComponents in der rechten Spalte enthält (JTextFields, JCheckBoxes für Boolean und JComboboxes für Integer)
Ich habe dazu meinen eigenen Cellrenderer erstellt, doch wenn ich versuche, z.B. die Checkbox anzucklicken, um den Wert zu ändern, erscheint an der Stelle ein TextField.
Also habe ich versucht meinen eigenen CellEditor zu programmieren, einen für Checkboxes und einen für Comboboxes, dies hat nicht funktioniert, also habe ich einen für beide geschrieben, aber dies funktioniert ebenfalls nicht.
Kann mir bitte jemand helfen?
Danke,
Developer_X
Ich habe eine JTable, welche Beschriftungen in der linken Spalte, und verschiedene JComponents in der rechten Spalte enthält (JTextFields, JCheckBoxes für Boolean und JComboboxes für Integer)
Ich habe dazu meinen eigenen Cellrenderer erstellt, doch wenn ich versuche, z.B. die Checkbox anzucklicken, um den Wert zu ändern, erscheint an der Stelle ein TextField.
Also habe ich versucht meinen eigenen CellEditor zu programmieren, einen für Checkboxes und einen für Comboboxes, dies hat nicht funktioniert, also habe ich einen für beide geschrieben, aber dies funktioniert ebenfalls nicht.
Kann mir bitte jemand helfen?
Danke,
Developer_X
Java:
String[] columnNames =
{"", ""};
Object[][] data =
{
{ "A", ""},
{ "B", ""},
{ "C", new Integer(0) },
{ "D", new Boolean(true) },
{ "E", "A.B.C" },
{ "F", new Integer(0) }
};
JTable table = new JTable(data, columnNames)
{
private static final long serialVersionUID = 1L;
@Override
public boolean isCellEditable(int row, int column)
{
if(column==0)
return false;
else
return true;
}
};
table.setRowSelectionAllowed(false);
table.setColumnSelectionAllowed(false);
table.setCellSelectionEnabled(false);
table.setPreferredScrollableViewportSize(table.getPreferredSize());
table.setDefaultRenderer( Object.class, new FormalDataCellRenderer(table.getDefaultRenderer(Object.class)));
table.setDefaultRenderer( Boolean.class, new FormalDataCellRenderer(table.getDefaultRenderer(Boolean.class)));
table.setDefaultRenderer( Integer.class, new FormalDataCellRenderer(table.getDefaultRenderer(Integer.class)));
table.setDefaultEditor(Object.class, new FormalDataCellEditor(table.getCellEditor()));
Java:
public class FormalDataCellRenderer implements TableCellRenderer
{
private TableCellRenderer normal;
public FormalDataCellRenderer(TableCellRenderer cellRenderer)
{
super();
this.normal = cellRenderer;
}
public Component getTableCellRendererComponent(JTable table,Object value, boolean isSelected, boolean hasFocus, int row,int column)
{
if(column==1)
{
if(value instanceof Boolean)
{
return new JCheckBox("",value.equals(new Boolean(true)));
}
else if(value instanceof Integer)
{
JComboBox<String> typeSelection = new JComboBox<String>();
typeSelection.addItem(sm.getString(StringConstants.PROFILE_GENDER_MALE));
typeSelection.addItem(sm.getString(StringConstants.PROFILE_GENDER_FEMALE));
typeSelection.setSelectedIndex((Integer)(value));
return typeSelection;
}
}
return normal.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
}
}
Java:
public class FormalDataCellEditor extends DefaultCellEditor
{
public FormalDataCellEditor(TableCellEditor editor)
{
super(new JCheckBox()); //? What shall I do?
}
@Override
public Component getTableCellEditorComponent(JTable table,Object value, boolean isSelected, int row, int column)
{
if(column==1)
{
System.out.println(value.toString());
if(value instanceof Boolean)
{
if(value.equals(new Boolean(true)))
{
value = new Boolean(false);
}
else
{
value = new Boolean(true);
}
return new JCheckBox("",value.equals(new Boolean(true)));
}
else if(value instanceof Integer)
{
JComboBox<String> typeSelection = new JComboBox<String>();
typeSelection.addItem(sm.getString(StringConstants.PROFILE_GENDER_MALE));
typeSelection.addItem(sm.getString(StringConstants.PROFILE_GENDER_FEMALE));
int selected = (Integer)(value);
if(selected<typeSelection.getItemCount()-1)
selected++;
else
selected = 0;
typeSelection.setSelectedIndex(selected);
value = new Integer(selected);
return typeSelection;
}
}
return super.getTableCellEditorComponent(table, value, isSelected,row, column);
}
}
Anhänge
Zuletzt bearbeitet von einem Moderator: