JList in Zelle von JTable anzeigen??
-
Hallo zusammen.
Ich habe da ein Problem mit der Darstellung von JList in einer Zelle von JTable.
Folgenden Renderer habe ich schon geschreiben aber leider klappt das nicht.public class TableListRenderer extends JList implements TableCellRenderer { public TableListRenderer(){ super(); } public Component getTableCellRendererComponent(JTable arg0, Object value, boolean arg2, boolean arg3, int arg4, int arg5) { Collection c = (Collection)value; this.setListData(c.toArray()); return this; } }
Ich kann mir nicht erklären wieso das nicht geht.
Kann mir da jemand vieleicht einen Tip geben oder direkt ne Lösung anbieten.Danke
Bye
-
Du könntest noch erwähnen, was genau nicht klappt.
Aber egal, ich hab's mal so probiert:class ListCellRenderer implements TableCellRenderer { JList liste; public ListCellRenderer(JList liste) { this.liste = liste; } public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { return liste; } } .... Object werte[] = {"Hallo 1", "Hallo 2"}; JList liste = new JList(werte); tabelle.getColumnModel().getColumn(0).setCellRenderer(new ListCellRenderer(liste));
Die Liste sollte so angezeigt werden. Allerdings musst du noch beachten, dass nicht nur der Renderer wichtig ist. Willst du beispielsweise auf die Liste klicken, um einen Wert zu bearbeiten, so musst du noch zusätzlich einen CellEditor schreiben, da standardmäßig ein Textfeld das Editieren übernimmt. Der Klasse DefaultCellEditor kann man entweder eine JComboBox, JCheckBox oder ein JTextField übergeben. Mit einer JList sollte es trotzdem funktionieren, wenn die Methode getTableCellEditorComponent() überschrieben und das JList-Objekt zurückgegeben wird.
-
Hi
Also das was nich geklappt hat war und ist, dass in der Zelle keine Liste angezeigt wird.
Ich werde das mal jetzt nach mit deiner Verrsion propieren.
Die Tabelle soll nur Objekte einer Klasse anzeigen und keine bearbeiten, dahier brauche ich keinen CellEditor.
Trotzdem Danke
-
Hi
Also ich habe es nun getestet.
Meine und deine Lösung hat funktioniert.
Das war nichtz geklappt hat bei beiden Versionen ist, dass die Höhe der Zeile nicht angepasst wird.
Als ich später myTable.setRowHight(50) gesetzt habe, da wurden alle elemente angezeigt.Das Problem ist als, dass die Höhe nicht automatisch angezeigt wird.
Ich weis ehrlich gesagt auch nicht wie man die Höhe neu berechnen lassen kann.Da die JList unter umständen mehrere Elemente beinhaltet und ich auch alle anzeigen will ist es wichtig.
Bye