我可以将组合框添加到JTable的特定单元格中吗?

时间:2010-03-30 07:46:50

标签: java swing jtable jcombobox

我想将组合框添加到JTable的单元格中。

model=new DefaultTableModel(data,col);
JTableHeader head=new JTableHeader();
head.setBackground(Color.BLUE);
table=new JTable(model);
table.add(head);
JComboBox combo = new JComboBox();
combo.addItem("Names");
combo.addItem("Antony");
combo.addItem("Victor");
combo.addItem("Ramkumar");
table.add(combo);

但我无法在电池中获得组合框。是否可以设置组合框?

3 个答案:

答案 0 :(得分:3)

您需要设置JTable的TableCellEditor。最好搜索Java Tutorials,但这里有一个简短的解释。

JTable使用三个主要类来工作:

1)TableModel:它的功能是说表有多少行和列,并提供表的数据,它的主要方法是getValue(row,col)和setValue(value,row,col)。并触发事件以通知JTable重新绘制。

2)TableCellRenderer:它的主要目的是在JTable的单元格中绘制组件。这些组件只涂漆:不工作!如果你绘制一个JComboBox,如果你点击它就不会消除它,或者你绘制一个JCheckbox它不会选择/取消选择。

3)TableCellEditor:它的主要目的是在JTableCell中绘制一个组件来编辑单元格的值。它接收事件并决定何时开始编辑,然后调用getTableCellEditorComponent方法返回编辑器组件。返回的组件必须启动事件,以便TableCellEditor知道何时停止编辑并获取值并使用它来调用TableModel.setvalue ...或取消编辑。

因此,要在JTable中显示JComboBox,您必须创建自己的TableCellEditor,如果您以前没有这样做,那么这不是一件容易的事。

答案 1 :(得分:2)

看看这个 Java tutorial并在此页面中搜索“使用组合框作为编辑器”

答案 2 :(得分:0)

试试这个:它为我工作..点击单元格查看组合框。

 private void comboloader() {
        try {
            TableColumn gradeColumn = jTable1.getColumnModel().getColumn(0);
            JComboBox comboBox = new JComboBox();

            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));
        } catch (Exception e) {
        }
    }