代码之家  ›  专栏  ›  技术社区  ›  Landei

jcomboBox-空项没有itemEvents

  •  2
  • Landei  · 技术社区  · 14 年前

    似乎没有选择或取消选择 ItemEvent 为jcomboBox中的空项生成s。我怎么能换这个?制作物品 "" 不是一个选项。

    import java.awt.event.ItemEvent;
    import java.awt.event.ItemListener;
    import javax.swing.JComboBox;
    import javax.swing.JOptionPane;
    
    public class ComboBoxTest {
       public static void main(String... args) {
           JComboBox cb = new JComboBox(new String[]{null, "one","two","three"});
           cb.addItemListener(new ItemListener(){
                public void itemStateChanged(ItemEvent e) {
                    System.out.println(e);
                }
           });
           JOptionPane.showMessageDialog(null, cb);
      }
    }
    
    3 回复  |  直到 10 年前
        1
  •  2
  •   dogbane    14 年前

    空对象在 JComboBox . 例如,组合框的 getSelectedIndex 如果对象是-1,则在选择项时激发的方法将返回-1。 null . 也可能有其他方法执行空检查,并可能返回不正确的结果。

    如果您真的需要这个功能,最好使用包装器对象。例如:

    class StringWrapper{
        final String s;
        public StringWrapper(String s){
            this.s=s;
        }
        @Override
        public String toString() {
            return s;
        }
    }
    
    final JComboBox cb = new JComboBox(new StringWrapper[]{ 
                new StringWrapper(null), 
                new StringWrapper("one"),
                new StringWrapper("two"),
                new StringWrapper("three")});
    
        2
  •  2
  •   Landei    14 年前

    好吧,我很蠢…只需子类jcombobox并添加:

    @Override
    protected void selectedItemChanged() {
        fireItemStateChanged(new ItemEvent(this, ItemEvent.ITEM_STATE_CHANGED,
                selectedItemReminder,
                ItemEvent.DESELECTED));
        selectedItemReminder = dataModel.getSelectedItem();
    
        fireItemStateChanged(new ItemEvent(this, ItemEvent.ITEM_STATE_CHANGED,
                selectedItemReminder,
                ItemEvent.SELECTED));
    }
    

    我仍然认为JComboBox所描述的行为是不一致和令人困惑的…

        3
  •  0
  •   Jeff Tromp    10 年前

    如果您希望在选择一个条目时触发一次操作,包括空值…

    import java.awt.event.ItemEvent;
    import java.awt.event.ItemListener;
    import javax.swing.JComboBox;
    import javax.swing.JOptionPane;
    
    public class ComboBoxTest {
       public static void main(String... args) {
           final JComboBox cb = new JComboBox(new String[]{null, "one","two","three"});
           cb.addItemListener(new ItemListener(){
                public void itemStateChanged(ItemEvent e) {
                    if (e.getStateChange() == ItemEvent.SELECTED || cb.getSelectedItem() == null)
                    System.out.println(e);
                }
           });
           JOptionPane.showMessageDialog(null, cb);
      }
    }