JComboBox记住其他选择

时间:2015-12-12 14:10:07

标签: java swing jtable jcombobox

我有一个JTable,在一列中我为每一行都有一个JComboBox。我按下按钮时动态添加行。在组合框中进行的选择将确定对该特定行执行的计算。为了论证,可以说组合框的选项是:选项1,选项2,选项3和选项4.

我遇到的问题如下:

假设我已经添加了2行并从第1行的组合框中选择任何选项,当我在第2行的组合框中进行选择时,选择与第1行相同的选项。似乎有一些那种记忆。如何禁用它,以便默认选择始终为-1(即所选的选项中没有)?我想完全掌控这一点。

以下是仅考虑选项1的示例代码片段:

String labels[] = {"Option 1", "Option 2", "Option 3", "Option4"};
        JComboBox comboBox = new JComboBox(labels);
        comboBox.setSelectedIndex(-1);


        ItemListener itemListener = new ItemListener() {
        public void itemStateChanged(ItemEvent itemEvent) {
        int state = itemEvent.getStateChange();
        ItemSelectable is = itemEvent.getItemSelectable();

        if (selectedString(is) == "Option 1" & state == ItemEvent.SELECTED){


            System.out.println("A");    

        }

        }

        };  

    comboBox.addItemListener(itemListener);

非常感谢您的时间和帮助:)

1 个答案:

答案 0 :(得分:2)

首先不要使用" =="比较字符串时。相反,您应该使用equals(...)方法:

if (someString.equals(anotherString))
    // do something

然而,这不是问题的原因。

您正在为JTable错误地使用JComboBox。您不应该使用ItemListener(或任何侦听器)。

组合框仅用作表格的编辑器。这意味着当您从组合框中选择一个值时,表的TableModel会更新。因此,如果您有基于所选值的自定义逻辑,则需要覆盖setValueAt(...)的{​​{1}}方法。

TableModel
  

如何禁用此选项,以便默认选择始终为-1

组合框中显示的值取自@Override public void setValueAt(Object value, int row, int column) { super.setValueAt(value, row, column); // add your custom logic here } 。因此,如果将默认值设置为null,则在开始编辑时,组合框将没有选择。

阅读How to Use Tables上Swing教程中的部分,了解更多信息和工作示例。保持教程链接便于将来参考Swing基础知识。