确保 JCombo 操作仅在初始选择时执行?

making sure JCombo actions only execute on initial selection?

我需要使用 JCombo 框,目前我只是将消息打印到屏幕以进行测试。当我进行选择时,它按预期工作,但是当我重新单击组合框以更改选择时,我会在它让我进行另一个选择之前得到相同的消息框。我如何获得它以便仅在初始选择时执行操作?

   String[] positions={"1","2","3","4"};
    JComboBox combo = new JComboBox<String>(positions);
    combo.addActionListener(new ActionListener(){

          @Override
          public void actionPerformed(ActionEvent ae ){
              //Display selected stuff
              JOptionPane.showMessageDialog(null, combo.getSelectedItem());

          } 
    });

请试试这个

  public static void main(String args[]) {

        JComboBox comboBox = new JComboBox();

        comboBox.addItemListener(new ItemListener() {
            @Override
            public void itemStateChanged(ItemEvent e) {
                System.err.println("new item: " + e.getItem());
            }
        });
    }

用一个boolean来判断是否已经被检查过。


解决方案

String[] positions={"1","2","3","4"};
JComboBox combo = new JComboBox<String>(positions);
combo.addActionListener(new ActionListener(){
      boolean comboAlreadyChecked = false;

      @Override
      public void actionPerformed(ActionEvent ae ){
          //Display selected stuff
          if (!comboAlreadyChecked){
              JOptionPane.showMessageDialog(null, combo.getSelectedItem());
              comboAlreadyChecked = true;
          }
      } 
});

PS :您的布尔值名称可能比这个更容易一些。这只是为了澄清。

在接受了提供的答案并通过修改上述教程中给出的解决方案后,我想出了以下解决方案:

String labels[] = {"", "A", "B", "C", "D", "E", "F"};
JComboBox comboBox = new JComboBox(labels);
ItemListener itemListener = new ItemListener() {
    public void itemStateChanged(ItemEvent itemEvent) {
        int state = itemEvent.getStateChange();
        ItemSelectable is = itemEvent.getItemSelectable();
        if (selectedString(is) == "A" & state == ItemEvent.SELECTED) {
            System.out.println("A");
        }
    }
};
comboBox.addItemListener(itemListener);