java - JComboBox 记住其他选择

标签 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);

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

最佳答案

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

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

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

您错误地将 JComboBox 用于 JTable。您不应该使用 ItemListener(或任何监听器)。

组合框仅用作表格的编辑器。这意味着当您从组合框中选择一个值时,表的 TableModel 就会更新。因此,如果您有基于所选值的自定义逻辑,则需要重写 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,则当您开始编辑时,组合框将不会有选择。

阅读 Swing 教程中关于 How to Use Tables 的部分了解更多信息和工作示例。请保留教程链接,以便将来引用 Swing 基础知识。

关于java - JComboBox 记住其他选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34240774/

相关文章:

java - 没有关系的 Hibernate 惰性对象

java - 线程中出现异常 "main"java.awt.AWTError : Assistive Technology not found: com. sun.java.accessibility.AccessBridge 错误

java - 我在 Java 程序中遇到 NullPointer 异常

java - 跨平台~2GB文件上传解决方案

java - 错误 :(18, 0) 无法在 null 对象上调用方法 mavenLocal()

java - 如何在 Java 中创建 "package"?

java - 更改 JTable 多列排序行为的最简单方法是什么?

java - JButton 小按钮

java - JTable 不显示列标题

java - 数据未通过 jtable 保存在数据库中(已编辑)