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 值的自定义逻辑,您需要覆盖 TableModel
的 setValueAt(...)
方法。
@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 基础知识。
我有一个 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 值的自定义逻辑,您需要覆盖 TableModel
的 setValueAt(...)
方法。
@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 基础知识。