当前位置: 首页 > 知识库问答 >
问题:

JComboBox记住其他选择

盖向荣
2023-03-14

我有一个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个答案

何涵忍
2023-03-14

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

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

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

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

组合框仅用作表的编辑器。这意味着当您从组合框中选择一个值时,表的模型将更新。因此,如果您有基于所选值的自定义逻辑,则需要重写<code>TableModel</code>的<code>setValueAt(…)</code>方法。

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

    //  add your custom logic here
}

如何禁用此功能,使默认选择始终为-1

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

阅读 Swing 教程中有关如何使用表的部分,了解更多信息和工作示例。将教程链接放在手边,以便将来参考 Swing 基础知识。

 类似资料:
  • 进程优先权 当计划线程时使用的优先权。在有需要时可调整优先权到较高或较低。 文件位置 你可以为不同的文件类型改变文件夹。在默认情况下,大部分的文件设置在设置位置。然而, 一些文件是保存在 profiles目录和全部日志文件保存在 logs 目录。 文件关联(只限于完整版本) 文件关联是 Navicat 使用什么来打开 Navicat 已保存的文件。例如:.npt 文件(数据传输设置文件)将会使用数

  • 问题内容: 我有一个将数组显示为单个选择的选项: 我想做的是它第一次加载时应显示默认值。选择一个选项并关闭对话框后,我再次弹出相同的对话框,它应显示我先前做出的选择并滚动到该对话框。 我该如何完成? 截至目前,我可以获取所选职位,但是接下来该怎么办? 问题答案: 您可以将所选值存储在您的变量中,也可以使用SharedPreferences

  • 我希望,如果我选择“mammals”,动物选择选项只显示值为1的选项data-animal_class。 我知道如何获得哺乳动物值,但我不知道如何使用过滤器 这是我的代码:

  • 我有一个表,它有4列()gender具有与每个客户链接的唯一值:、或。 该部门与每种产品(男性或女性)都有独特的价值 我做了一个复杂的过程。首先,使用客户信息将male和其他客户分开(创建了两个表CUST_MALEY和cust_other) 如果CUST_MALEY表中有客户,则使用join,返回men division products行(其中division='men');如果cust_oth

  • 8.2 节实现的登录系统自成一体且功能完整,不过大多数网站还会提供一种功能——用户关闭浏览器后仍能记住用户的会话。本节,我们首先实现自动记住用户会话的功能,只有用户明确退出后会话才会失效。8.4.5 节实现另一种常用方式:提供一个“记住我”复选框,让用户选择是否记住会话。这两种方式都很专业,GitHub 和 Bitbucket 等网站使用第一种,Facebook 和 Twitter 等网站使用第二

  • 问题内容: 我创建了一个自定义列表视图,在每行的左侧有两个箭头(向上/向下投票)。使用选择器,我已经能够更改箭头的图像(颜色)并相应地更新投票。我的问题是,例如,如果我单击“投票”,则当我向下滚动足够远以使我投票过的列表项退出屏幕时,它将重置为原始未选中状态/图像。 这是我的获取视图方法 问题答案: 所以我自己弄清楚了。这是由于对教程的深刻理解造成的。 我将一个对象传递给我的自定义适配器,我要做的