2016-12-26 7 views
2

私はこれらInteger秒のDefaultComboBoxModelJComboBoxを持っている:なぜJComboBoxはNULL値の状態を無視しますか?

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

は私JComboBox5を持っていると私は意志の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 ->)で呼び出されなかったのはなぜですか?

私が最初にJComboBox5を持っていたと私は空の値(すなわち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を設定しない:あなたが言うことが本当

答えて

6

は、私が見ることができることはsetSelectedItem方法でJComboboxクラスであることです。

DefaultComboBoxModelの実装setSelectedItemのメソッドはnullを渡し、fireContentsChangedイベントを呼び出さない。

関連する問題