G
Gast
Gast
Hallo,
Ich benutze für meine Table einen eigenen Renderer und Editor um ComboBoxen in der Tabelle darstellen zu können.
Ich will eigentlich folgendes haben: Wenn die Zelle nicht angeklickt ist soll man die Combobox nicht sehen nur wenn man darauf klickt. Das aktuelle Problem ist das man zwar auf eine Zelle klicken kann und auch etwas aus der Box auswählen kann doch beim verlassen der Zelle ist die Auswahl weg und man hat wieder ein leeres Feld.
Hier mal der Code:
Also irgendwas stimmt wohl am Renderer nicht, hab aber momentan nicht so den Plan an was es liegen könnte.
Also hab auch noch andere Sachen ausprobiert die aber alle massig Fehler mit sich brachten. Das oben funktioniert soweit auch, mal davon abgesehen das die Zellen immer leer bleiben ausser wenn man sie editiert.
Hab auch schon so was wie setText((String)value); über der return this; Zeile im Renderer versucht, hat aber null gebracht.
Ich benutze für meine Table einen eigenen Renderer und Editor um ComboBoxen in der Tabelle darstellen zu können.
Ich will eigentlich folgendes haben: Wenn die Zelle nicht angeklickt ist soll man die Combobox nicht sehen nur wenn man darauf klickt. Das aktuelle Problem ist das man zwar auf eine Zelle klicken kann und auch etwas aus der Box auswählen kann doch beim verlassen der Zelle ist die Auswahl weg und man hat wieder ein leeres Feld.
Hier mal der Code:
Code:
table.getColumnModel().getColumn(1).setCellEditor(new ComboBoxEditor());
table.getColumnModel().getColumn(1).setCellRenderer(new ComboBoxRenderer());
class ComboBoxRenderer extends DefaultTableCellRenderer
{
public Component getTableCellRendererComponent(JTable table,final Object value, boolean isSelected, boolean hasFocus, int row, int column)
{
return this;
}
}
class ComboBoxEditor extends JComboBox implements TableCellEditor
{
protected JComponent editorComponent = null;
private Vector listeners = new Vector();
protected EventListenerList listenerList = new EventListenerList();
protected transient ChangeEvent changeEvent = null;
public ComboBoxEditor()
{
super(new Object[] {"","Eins","Zwei","Drei"});
}
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column)
{
return this;
}
public Object getCellEditorValue()
{
return editorComponent;
}
public boolean isCellEditable(EventObject anEvent)
{
return true;
}
public boolean shouldSelectCell(EventObject anEvent)
{
return true;
}
public boolean stopCellEditing()
{
fireEditingStopped();
return true;
}
public void cancelCellEditing()
{
fireEditingCanceled();
}
public void addCellEditorListener(CellEditorListener l)
{
}
public void removeCellEditorListener(CellEditorListener l)
{
}
protected void fireEditingCanceled()
{
ChangeEvent e = new ChangeEvent(this);
for(int i = 0,n = listeners.size();i<n;i++)
((CellEditorListener)listeners.get(i)).editingCanceled(e);
}
protected void fireEditingStopped()
{
ChangeEvent e = new ChangeEvent(this);
for(int i = 0,n = listeners.size();i<n;i++)
((CellEditorListener)listeners.get(i)).editingStopped(e);
}
}
Also irgendwas stimmt wohl am Renderer nicht, hab aber momentan nicht so den Plan an was es liegen könnte.
Also hab auch noch andere Sachen ausprobiert die aber alle massig Fehler mit sich brachten. Das oben funktioniert soweit auch, mal davon abgesehen das die Zellen immer leer bleiben ausser wenn man sie editiert.
Hab auch schon so was wie setText((String)value); über der return this; Zeile im Renderer versucht, hat aber null gebracht.