[Swing] komórka JTable jako combo box

0

hej!

mam taki problem: chciałbym, aby w jednej kolumnie tabeli były komórki, które są rozwijalnymi listami (ComboBox). Dla każdego wiersza w tabeli zawartość listy byłaby inna. Niestety nie potrafię za bardzo tego zrobić :/

w funkcji dodającej wiersz do tabeli jest coś takiego:

Object[] movieData = { id, t, g, ry, c, rt, d, <b>stuff</b>, m, desc };
        tableModel.insertRow(table.getRowCount(), movieData);

(stuff jest ComboBoxem).

stworzyłem renderer dla komórek które mają być listami:

class ComboBoxRenderer extends JComboBox implements TableCellRenderer {
    
    public Component getTableCellRendererComponent(
                            JTable table, Object value,
                            boolean isSelected, boolean hasFocus,
                            int row, int column) {
                            
  
       JComboBox combo = (JComboBox)value;
             
        return combo;
    }
}

jeśli dobrze zrozumiałem dokumentację, value przyjmuje przekazywane wyżej combo (nazwane stuff).

oczywiście dodałem ten renderer do odpowiedniej kolumny:

table.getColumnModel().getColumn(7).setCellRenderer(new ComboBoxRenderer());

niestety zamiast wyświetlanego combo pokazuje mi tylko informacje o tym ComboBoxie:

javax.swing.JComboBox[,-126,-15,0x0,invalid,layout=com.sun.java.swing.plaf.windows.WindowsComboBoxUI$3,alignmentX=0.0,alignmentY=0.0,border=com.sun.java.swing.plaf.windows.XPStyle$XPStatefulFillBorder@10d593e,flags=16777544,maximumSize=,minimumSize=,preferredSize=,isEditable=false,lightWeightPopupEnabled=true,maximumRowCount=8,selectedItemReminder=s]

jeśli dodam do tej komórki CellEditor, wtedy pokazuje mi niby pierwszy element przekazanych danych, ale po rozwinięciu lista jest pusta :/

table.getColumnModel().getColumn(7).setCellEditor(new DefaultCellEditor(new JComboBox()));

na pewno robię jakiś głupi błąd, ale nie potrafię w tej chwili znaleźć przyczyny, dlaczego tak się dzieje. z góry dzięki za pomoc, to dla mnie ważne.

pozdrawiam!

0

U mnie wyglada to tak:

    private JComboBox widthCombo=new JComboBox();
    ....
    widthCombo.addItem("Przeglądarka");
    widthCombo.addItem(...);
    .....
    td.setCellEditor(new DefaultCellEditor(widthCombo)); // td jest kolumną

Renderera nie musisz zmieniać

table.getColumnModel().getColumn(7).setCellEditor(new DefaultCellEditor(new JComboBox()));

dodajesz pusty JComboBox

1 użytkowników online, w tym zalogowanych: 0, gości: 1