【发布时间】:2014-04-03 14:13:06
【问题描述】:
设置选中项的原码为:
public void setSelectedItem(Object anObject) {
Object oldSelection = selectedItemReminder;
Object objectToSelect = anObject;
if (oldSelection == null || !oldSelection.equals(anObject)) {
if (anObject != null && !isEditable()) {
// For non editable combo boxes, an invalid selection
// will be rejected.
boolean found = false;
for (int i = 0; i < dataModel.getSize(); i++) {
E element = dataModel.getElementAt(i);
if (anObject.equals(element)) {
found = true;
objectToSelect = element;
break;
}
}
if (!found) {
return;
}
}
我认为这条线
if (anObject.equals(element)) {
应该是
if (element.equals(anObject)) {
考虑显示一个组合框,例如。语言 那么你有一个像
这样的类class Language {
String code; // eg. "en"
String name; // eg. "English"
...
}
如果您将 Language 项添加到 ComboBox,则 toString 函数用于显示项。在上面的类中,toString 函数将返回名称。调用 setSelectedItem("en") 失败,因为
String.equals(Language) 将失败,因为 Language.toString() 将返回 "English"
反过来 Language.equals(String) 会有所帮助,因为类 Language 可以覆盖
boolean equals(String comp) {
return comp.equals(code)
}
为了澄清,我知道如何创建一个具有所需行为的组合框,我的问题是:原始代码中的比较是一个错误还是我错过了一些基本的东西?
【问题讨论】: