单击JTable单元格时,Combobox不会弹出

时间:2016-07-30 10:53:59

标签: java swing combobox jtable tablecellrenderer

我有一个问题,任何人都可以帮助我。这是我的JTable,其中呈现的一列在其单元格中有一个组合框。这是我的表中的问题:当我单击组合框时它不会弹出。当我打印table.getValueAt(row,column)时,它将返回单元格的prev数据而不是组合框中的数据,并且它不会显示允许用户选择的组合框。

JTable的代码:

public void setUpSportColumn(JTable table, TableColumn sportColumn) {
    // Set up the editor for the sport cells.
    JComboBox<String> comboBox = new JComboBox<String>();
    DefaultComboBoxModel<String> model = new DefaultComboBoxModel<String>();
    model.addElement("Snowboarding");
    model.addElement("Rowing");
    model.addElement("Knitting");
    model.addElement("Speed reading");
    model.addElement("Pool");
    model.addElement("None of the above");
    comboBox.setModel(model);
    sportColumn.setCellEditor(new DefaultCellEditor(comboBox));

    ComboBoxTableCellRenderer renderer = new ComboBoxTableCellRenderer();
    renderer.setModel(model);
    sportColumn.setCellRenderer(renderer);
}

image

1 个答案:

答案 0 :(得分:1)

TableRenderDemo是一个完整的工作示例,如下所述。

image

  1. 要查看编辑器更新TableModel,请在MyTableModel中启用调试。

    private boolean DEBUG = true;
    

    结果将显示在控制台上:

    $ java TableRenderDemo
    Setting value at 0,2 to None of the above (an instance of class java.lang.String)
    New value of data:
        row 0:  Mary  Campione  None of the above  5  false
        row 1:  Alison  Huml  Rowing  3  true
        row 2:  Kathy  Walrath  Knitting  2  false
        row 3:  Sharon  Zakhour  Speed reading  20  true
        row 4:  Philip  Milne  Pool  10  false
    
  2. 使用here所示的方法之一让表格编辑器具有普通JComboBox的设计;上面说明了使用UIManager图标的已接受answer

    sportColumn.setCellRenderer(new DefaultTableCellRenderer(){
    
        @Override
        public Component getTableCellRendererComponent(JTable table, Object value,
                boolean isSelected, boolean hasFocus, int row, int column) {
            JLabel label = (JLabel) super.getTableCellRendererComponent(table,
                value, isSelected, hasFocus, row, column);
            label.setIcon(UIManager.getIcon("Table.descendingSortIcon"));
            return label;
        }
    });