【问题标题】:Problem with adding JCombobox in JTable in Java?在 Java 中的 JTable 中添加 JCombobox 有问题吗?
【发布时间】:2011-05-20 02:23:59
【问题描述】:

我在一个JTable中添加了一个combobox,添加代码如下:

Vector<String> header = new Vector<String>();
Vector data = new Vector();
String[] h = new String[]{"Music", "Movie", "Sport"};
header.add("Code");
header.add("Name");
header.add("Salary");
 header.add("Hobby");
loadData(); // Add some data to the table
DefaultTableModel tblModel;
tblModel = (DefaultTableModel) this.tblEmp.getModel();
tblModel.setDataVector(data, header);

// Adding combobox to the last column
TableColumn hobbyColumn = tblEmp.getColumnModel().getColumn(3);
hobbyColumn.setCellEditor(new MyComboBoxEditor(h));

在我使用代码向表动态添加新行之前,一切正常:

Vector v = new Vector();
v.add("E333");
v.add("Peter");
v.add(343);
v.add(""); // This last colum is the combobox so I put it as ""

data.add(v);
tblEmp.updateUI();

数据已添加到表中,但无法再选择最后一列中的组合框。当我单击该行但无法选择值时,仍然显示组合框。 请问我该如何处理这个问题?

【问题讨论】:

  • 我猜我们将无法根据未显示的代码找出您的问题,并且您无法发布所有代码。最好创建一个可编译和可运行的小型程序,我们可以测试和修改它并演示您的问题,sscce
  • 至少,您必须向我们展示 MyComboBoxEditor 的代码,这可能是问题的根源。此外,您不应直接将新行添加到您的data Vector,而应使用tblModel.addRow(),它会自动触发 UI 更新。顺便说一句,updateUI() 不是用于刷新表,而是更改其 LAF,因此您应该永远使用它..
  • 我们已根据您的问题为您提供了所有帮助。在您发布 SSCCE 之前,我们将无法提供任何其他帮助。

标签: java swing jtable jcombobox


【解决方案1】:

永远不要使用 updateUI() 方法。阅读 API 以了解此方法的实际作用。它与更改模型中的数据无关。

JTable 已经支持组合框编辑器,因此无需创建自定义 MyComboBoxEditor。阅读 JTable API 并点击关于“如何使用表格”的 Swing 教程的链接,了解使用组合框作为编辑器的工作示例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多