私はこれらInteger
秒のDefaultComboBoxModel
とJComboBox
を持っている:なぜJComboBoxはNULL値の状態を無視しますか?
{null, 1, 2, 3, 4, 5, 6, 7, 8, 9}
は私JComboBox
で5
を持っていると私は意志のdispay以下、プログラム、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
あるとき私には明確ではない何か、なぜ、出力はItemListener
が一度呼ばれた意味
-> 3
です、 ItemEvent.SELECTED
状態でのみ表示されます。数値の場合と同様に、null
の場合はItemEvent.DESELECTED
(例:印刷null ->
)で呼び出されなかったのはなぜですか?
私が最初にJComboBox
で5
を持っていたと私は空の値(すなわちnull
)を選択した場合、それは、あまりにも他の道を行く、その後、私は、コンソールに表示すべてがある:だからなぜ
5 ->
JComboBox
無視するnull
値の状態? the docsはそれについて何も言わないようです。
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
を設定しない:あなたが言うことが本当