Java JComboBox记住其他选择
我有一个JTable,在一列中,我为每一行都有一个JComboBox。我按下按钮时动态添加行。组合框中的选择将决定对该特定行执行的计算。为了参数起见,让我们假设组合框的选项是:选项1、选项2、选项3和选项4 我的问题如下: 假设我添加了2行,并从第1行的组合框中选择任意选项,当我在第2行的组合框中进行选择时,会勾选与第1行相同的选择。似乎有某种记忆。如何禁用此选项,使默认选择始终为-1(即未选择任何选项)?我想完全控制这一切 下面是一段仅考虑选项1的代码示例:Java JComboBox记住其他选择,java,swing,jtable,jcombobox,Java,Swing,Jtable,Jcombobox,我有一个JTable,在一列中,我为每一行都有一个JComboBox。我按下按钮时动态添加行。组合框中的选择将决定对该特定行执行的计算。为了参数起见,让我们假设组合框的选项是:选项1、选项2、选项3和选项4 我的问题如下: 假设我添加了2行,并从第1行的组合框中选择任意选项,当我在第2行的组合框中进行选择时,会勾选与第1行相同的选择。似乎有某种记忆。如何禁用此选项,使默认选择始终为-1(即未选择任何选项)?我想完全控制这一切 下面是一段仅考虑选项1的代码示例: String labels[] =
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
将更新。因此,如果您有基于所选值的自定义逻辑,则需要覆盖表格模型的setValueAt(…)
方法
@Override
public void setValueAt(Object value, int row, int column)
{
super.setValueAt(value, row, column);
// add your custom logic here
}
如何禁用此选项,使默认选择始终为-1
组合框中显示的值取自表格模型
。因此,如果将默认值设置为null,则在开始编辑时组合框将不会有选择
有关更多信息和工作示例,请阅读上Swing教程的部分。将教程链接放在手边,以便将来参考Swing基础知识。很抱歉,代码什么都没说…,为了更好地获得帮助,请尽快发布一个SSCCE/MCVE,简短,可运行,可编译,带有本地变量的JTable/xxxttablemodel的硬编码值感谢您为我指明了正确的方向。非常感谢!