我有一个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);
非常感谢您的时间和帮助:)
答案 0 :(得分:2)
首先不要使用" =="比较字符串时。相反,您应该使用equals(...)
方法:
if (someString.equals(anotherString))
// do something
然而,这不是问题的原因。
您正在为JTable错误地使用JComboBox。您不应该使用ItemListener(或任何侦听器)。
组合框仅用作表格的编辑器。这意味着当您从组合框中选择一个值时,表的TableModel
会更新。因此,如果您有基于所选值的自定义逻辑,则需要覆盖setValueAt(...)
的{{1}}方法。
TableModel
如何禁用此选项,以便默认选择始终为-1
组合框中显示的值取自@Override
public void setValueAt(Object value, int row, int column)
{
super.setValueAt(value, row, column);
// add your custom logic here
}
。因此,如果将默认值设置为null,则在开始编辑时,组合框将没有选择。
阅读How to Use Tables上Swing教程中的部分,了解更多信息和工作示例。保持教程链接便于将来参考Swing基础知识。