将 JComboBox 放入 JTable

2022-09-03 15:27:25

我想将单个JComboBox放入JTable的每个单元格中。即。JComboBox 内容对于每个单元格都不相同。

我基本上希望能够调用以下代码将一行JComboBox添加到JTable中。有人知道吗?谢谢

JComboBox cb1 = new JComboBox(...);
JComboBox cb2 = new JComboBox(...);
model.addRow(new Object[] {"Row name", cb1, cb2} );

JComboBox cb3 = new JComboBox(...);
JComboBox cb4 = new JComboBox(...);
model.addRow(new Object[] {"Row name 2", cb3, cb4} );

我能找到的最接近的示例代码如下所示。但是对于单个列的JComboBox内容是相同的。不是我需要的解决方案。

TableColumn col = table.getColumnModel().getColumn(vColIndex);
col.setCellEditor(new MyComboBoxEditor(values));

哪里

public class MyComboBoxEditor extends DefaultCellEditor {
    public MyComboBoxEditor(String[] items) {
        super(new JComboBox(items));
    }
}

答案 1

使用以下代码扩展 JTable:

@Override
public TableCellEditor getCellEditor(int row, int column) {
   Object value = super.getValueAt(row, column);
   if(value != null) {
      if(value instanceof JComboBox) {
           return new DefaultCellEditor((JComboBox)value);
      }
            return getDefaultEditor(value.getClass());
   }
   return super.getCellEditor(row, column);
}

这将为您获得a值的每个组合框创建一个唯一的JComboBox单元格编辑器。


答案 2

我相信这将解决您的问题。提及需要在哪一列中设置组合框.getColumn(int列)

private void addComboToTable(JComboBox combo) {
    TableColumn gradeColumn = YourTable.getColumnModel().getColumn(0);
    JComboBox comboBox = combo;
    comboBox.removeAllItems();
    try {
        comboBox.addItem("Item 1");
        comboBox.addItem("Item 2");
        comboBox.addItem("Item 3");
    } catch (NullPointerException e) {
    } catch (Exception e) {
        e.printStackTrace();
    }
    gradeColumn.setCellEditor(new DefaultCellEditor(comboBox));
}

推荐