JComboBox 记住其他选择

JComboBox remembering other selections

我有一个 JTable,在一列中,我有一个 JComboBox 用于每一行。我在按下按钮时动态添加行。 select 组合框中的离子将决定对该特定行执行的计算。为了论证,假设组合框的选项是:选项 1、选项 2、选项 3 和选项 4。

我遇到的问题如下:

说我已经添加了 2 行和 select 来自第 1 行组合框的任何选项,当我在第 2 行的组合框中创建一个 selection 时 select ]ion 被勾选为第 1 行。似乎有某种记忆。我怎样才能禁用它,以便默认的 selection 始终为 -1(即非 selected 选项)?我想完全控制它。

这是一个仅考虑选项 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);

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

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

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

但是,这不是问题的原因。

您对 JTable 使用的 JComboBox 不正确。您不应该使用 ItemListener(或任何侦听器)。

组合框仅用作 table 的编辑器。这意味着当您 select 组合框中的值时,table 的 TableModel 会更新。因此,如果您有基于 selected 值的自定义逻辑,您需要覆盖 TableModelsetValueAt(...) 方法。

@Override
public void setValueAt(Object value, int row, int column)
{
    super.setValueAt(value, row, column);

    //  add your custom logic here
}

How can I disable this, so that the default selection is always -1

组合框中显示的值取自TableModel。因此,如果您将默认值设置为 null,则当您开始编辑时,组合框将没有 selection。

阅读 How to Use Tables 上的 Swing 教程部分,了解更多信息和工作示例。将教程 link 放在手边,以便将来参考 Swing 基础知识。