2012-06-27 71 views
0

我正在处理一个程序,其中2个JComboBoxes必须设置对方的 所选项目。让我们复制他们的对象名称wheelsTypeCombo和carBrandCombo。 它们的模型都包含从数据库(第一个列表中的类型1的对象和第二个列表中的类型2的对象)检索到的每个对象的列表,以及相应类型的特殊wheelsTypeShowAll和carBrandShowAll。当选择最后2个项目中的任何一个时,则显示两个JComboBox中包含的所有项目,包括它们自己(2个特殊项目)。互惠影响JComboBoxes

的JComboBoxes互惠关系的规则如下:

  1. 当我们选择wheelsTypeCombo一个项目,该carBrandCombo重新装载 所有使用的汽车品牌只有那些类型的轮胎和carBrandShowAll的项目
  2. 当carBrandShowAll项目从第一种情况状态选择CarBrandCombo 然后CarBrandCombo将重新加载数据库中的所有相应项目, wheelTypeCombo也有选定项目wheelsTypeShowAll。
  3. 当我们选择carBrandCombo那么相应的车轮类型的项目在wheelsTypeCombo选择 项目
  4. 如果已经在一个对应关系项目被选中,那么不需要setSelectedItem 采取行动要么JComboBoxes

我暂时尝试使用匿名ItemListener类,当我将JComboBoxes添加到接口时,却发现自己可能会因调用方法调用而导致堆栈和空指针异常溢出。

我希望在任何级别上进行任何合理的改进。

+2

为更好地帮助发布[SSCCE](http://sscce.org/) – mKorbel

+1

另请参阅此[示例](http://stackoverflow.com/a/3191882/230513)。 – trashgod

回答

1

如果我要做到这一点,我创建了两个自定义类,carBrand和wheelsType,然后让他们每个人实现getUsers调用,它返回是相关的项目自身内部列表:

public carBrand 
    public static Enum allWheels 
    List<wheelsType> myWheels; 
    getWheels() { 
     return myWheels; 
    } 
    setWheels(); 

public wheelsType 
    public static Enum allBrands 
    List<carBrands> myBrands; 
    getBrands(); 
    setBrands(); 

然后在你的组合框代码,握住你的车轮和品牌的列表,然后用

getSelected().getBrands() 

getSelected().getWheels(). 
0123的结果更新的ListModel

然后,您也可以静态调用getAllBrands()或任何其他选项来选择您的“全部”选项。

有可能是'更简单'的方法,比如为每个方法制作一个Map,但我认为这将是最“清晰”的方式。