2011-11-09 126 views
2

编辑:由于术语“默认值”令人困惑,我将其更改为“初始值”。检查JComboBox是否具有默认值

这是一个有趣的问题。我在网站上搜索了一个答案,但没有找到答案。

我正在用Java编写一个验证器类,我想验证的一件事是JComboBox是否有其初始值。

注意,我是检查,看看用户是否选择了值;只要用户选择的值与初始值相同即可。

例如,假设有三种选择:

Some Message Here 
Item 1 
Item 2 
Item 3 

...等。 “Some Message Here”文本将是初始值,我将使用setSelectedIndex或setSelectedItem方法进行设置。

问题是,一旦用户选择另一个项目(比如项目1),那么就没有办法告诉初始值应该是什么。

我不能仅仅检查一个“幻数”(比如说,如if (cb.getSelectedIndex() == 0)),因为验证器类无法知道索引0处的值是否实际上是初始值应该是什么是。 (也可能不是,例如在美国的州名单中)。

也不能使用任何事件侦听器。考虑用户选择“项目1”,然后重新选择“某些消息在这里”的情况。我想这会失败验证。

任何想法?

+0

将默认值存储在变量中,并检查所选值是否等于存储在此变量中的值。我错过了什么? –

+2

不太明白“默认值”是什么意思 - 最初选择的值不包含在列表本身中?无论如何,这就是我会这样做的方式,因为让用户选择任何无效的用户不友好 – kleopatra

+0

@JB Nizet:所以,你说我应该将默认值(作为字符串或int)传递给验证方法本身?这是好的,但看起来好像更优雅:'Validator.isDefault(myComboBox)' –

回答

1

为了记录在案,这里是我落得这样做:

我把JB Nizet的建议,并有编码器通过初始值的静态验证器类,如:

Validator.isDefault(myComboBox, myInitialIndex); 

然而,我也重载它,这样你可以简单地用JComboBox中调用它,该指数将默认为0:

Validator.isDefault(myComboBox); // same as Validator.isDefault(myComboBox, 0); 

我可能还超载,以便它以一个字符串作为第二个参数(并使用getSelectedItem()检查它)。

如果有更好的方法来做到这一点,我不知道它会是什么。