Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Gleiche Tabelle, noch eine Frage.
Eine Spalte meines jTable zeigt ComboBoxen an. Das funktioniert auch soweit, nur dass man nicht sieht, dass es eine ComboBox ist, die Pfeile fehlen.
Wie bekomme ich das visuell so hin, dass man sofort sieht, dass man ComboBoxen vor sich hat ?
Die Tabelle unterscheidet zwischen Renderer und Editor. Ein Editor wird dann benutzt, wenn man eine Tabellenzelle editiert, ansonsten wird ein Renderer benutzt. So kann man theoretisch zwei völlig unterschiedliche Komponenten zum Darstellen und Editieren verwenden.
Was du nun brauchst ist ein eigener Renderer. Grundsätzlich setzt man den auch für seine Datentypen mit
Für Comboboxen gibt es leider nicht so etwas, wie beim Editor, dass man
Code:
new DefaultCellEditor(myEditorComboBox);
macht (...oder ich kenn es nicht), daher muss man wohl eine eigene Klasse machen, zB von JComboBox erben und das TableCellRenderer Interface implementieren.
Oder man probiert etwas wie folgt, aber ich finde das sieht komisch aus...
Java:
myTable.setDefaultRenderer(MeinTyp.class, new DefaultTableCellRenderer()
{
private JComboBox box = null;
{
// deine ComboBox muss die entsprechenden Werte haben, sonst
// ...gibts Probleme bei setSelectedItem()
box = new JComboBox(new Object[]{0, 1, 2, 3, 4});
box.setBorder(null);
}
@Override
public Component getTableCellRendererComponent(...)
{
Component comp = super.getTableCellRendererComponent(...);
box.setBackground( comp.getBackground() );
box.setForeground( comp.getForeground() );
box.setSelectedItem(value);
return box;
}
});
...so in etwa. Viel Spaß beim ausbauen Wichtig: Der Renderer wird NUR zum malen benutzt, d.h. das Ding sieht zwar aus wie eine JComboBox, beim Klicken und Ändern aber wird der Editor angesprochen. Insbesondere also wirkt ein Klick auf den Combobox-Pfeil nicht!
Vielleicht postet du mal etwas Code, denn aus dieser Situation heraus kann ich nur ins Blaue raten. Mein obiger Code funktioniert soweit und für sich.
Der Satz
Eine Spalte meines jTable zeigt ComboBoxen an. Das funktioniert auch soweit, nur dass man nicht sieht, dass es eine ComboBox ist [...]
...wie KrokoDiehl bereits erwähnt hat.
Eine JTable unterscheidet zwischen Renderer und Editor. Der Editor wird verwendet um Zelleninhalte zu bearbeiten (in Deinem Falle eine ComboBox) und der Render bestimmt das Aussehen der Zelle (in Deinem Fall ein JLabel)
Wenn der Zelleninhalt anders dargestellt werden soll, muss man einen entsprechenden Renderer definieren.
Ok, jetzt gehts, hatte einen Fehler drin.
Das ganze geht sogar wesentlich kürzer :
Code:
@Override
public Component getTableCellRendererComponent(...)
{
removeAllItems();
addItem(value);
return this;
}
Unter Windows und Linux sieht das jetzt auch aus wie gewollt.
Unter Mac wirkt die abgerundete ComboBox in der Zelle irgendwie blöd, weil sie die Celle nicht ausfüllt. Die "flache" Variante habe ich noch nicht gefunden.