gpt4 book ai didi

java - 为什么JComboBox会忽略空值状态?

转载 作者:行者123 更新时间:2023-12-03 20:29:43 25 4
gpt4 key购买 nike

我有一个JComboBox和这些DefaultComboBoxModelInteger

{null, 1, 2, 3, 4, 5, 6, 7, 8, 9}


假设我的 5中有 JComboBox,然后单击 JComboBox并选择 2,则下面的程序将显示:

5 ->
-> 2


这是程序:

import javax.swing.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

import static java.lang.System.out;

public class Test {
public static void main(String[] args){
final JComboBox<Integer> cb = new JComboBox<>();
cb.setModel(new DefaultComboBoxModel<>(new Integer[]{null, 1, 2, 3, 4, 5, 6, 7, 8, 9}));
cb.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
switch (e.getStateChange()) {
case ItemEvent.DESELECTED:
out.format("%s ->\n", e.getItem());
break;
case ItemEvent.SELECTED:
out.format(" -> %s\n", e.getItem());
break;
}
}
});

final JFrame win = new JFrame();
win.setBounds(800,400,30,70);
win.add(cb);
win.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
win.setVisible(true);
}
}


我不清楚的是为什么当值最初为 null时(它是模型数组中的第一个值),所以输出为

 -> 3


这意味着 ItemListener仅在 ItemEvent.SELECTED状态下被调用一次。为什么不使用 ItemEvent.DESELECTED调用 null(例如打印 null ->),而不用数字调用它?

如果我最初在 5中有 JComboBox并且选择了空值(即 null),那么我在控制台中看到的就是:

5 ->


那么,为什么 JComboBox忽略 null值状态? the docs似乎什么也没说。

最佳答案

您所说的是正确的,我可以看到的是在JCombobox方法的setSelectedItem类中:

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;
}
}


它没有设置 objectToSelect

因此,在 DefaultComboBoxModel实现中, setSelectedItem方法传递null且不调用 fireContentsChanged事件。

关于java - 为什么JComboBox会忽略空值状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41336184/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com