2015-12-12 85 views
0

我有一个JTable,在一个列中,我为每个行都有一个JComboBox。我按下按钮时动态添加行。在组合框中进行的选择将决定针对该特定行进行的计算。为了讨论可以说,对于组合框的选项是:选项1,选项2,选项3,选项4JComboBox记住其他选择

我遇到的问题如下:

说我已经加入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

对不起码谈论什么... ...,为更好地帮助越早张贴SSCCE/MCVE,短,可运行,编译与局部变量 – mKorbel

回答

2

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

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

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

您正在为JTable使用JComboBox不正确。你不应该使用ItemListener(或任何监听器)。

组合框仅用作表格的编辑器。这意味着当您从组合框中选择一个值时,该表的TableModel已更新。因此,如果您有基于选定值的自定义逻辑,则需要覆盖TableModelsetValueAt(...)方法。

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

    // add your custom logic here 
} 

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

在组合框中显示的值是从TableModel拍摄。因此,如果您将默认值设置为null,则在开始编辑时,组合框将不会有选择。

有关更多信息和工作示例,请参阅Swing教程How to Use Tables中的部分。方便地将教程链接保留以供将来参考Swing基础知识。

+0

感谢您指出我在正确的方向的JTable/XxxTableModel硬编码值。非常感激! – volican