【问题标题】:JComboBox ,itemStateChangedJComboBox ,itemStateChanged
【发布时间】:2014-05-27 16:48:55
【问题描述】:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Count extends JFrame implements ItemListener {

    private JComboBox box;
    private static String[] num = {"5", "6", "7", "8", "9", "10"};
    private static int size, i;

    public Count() {
        super("Count");
        setLayout(new FlowLayout());

        box = new JComboBox(num);
        box.addItemListener(this);
        add(box);
    }

    @Override
    public void itemStateChanged(ItemEvent e) {
        size = Integer.parseInt((String)box.getSelectedItem());
        for (i = 1; i <= size; i++) {
            System.out.print(" " + i);
        }
        System.out.println();

    }

    public static void main(String[] args) {
        Count a = new Count();
        a.setSize(200, 150);
        a.setVisible(true);
        a.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }
}

此代码从 1 打印到所选项目

前: 如果您选择数字 8 ,将打印

1 2 3 4 5 6 7 8

但是有错误

前: 选择号码8时,将打印

1 2 3 4 5 6 7 8

1 2 3 4 5 6 7 8

打印两次,为什么?

【问题讨论】:

标签: java jframe jcombobox


【解决方案1】:

这里 itemStateChanged 触发了 2 次。但是如果你可以像这样改变 itemStateChanged() 方法,你可以只过滤掉 2 个状态中的一个状态

 public void itemStateChanged(ItemEvent e) {
        size = Integer.parseInt((String)box.getSelectedItem());
        if (e.getStateChange() == ItemEvent.SELECTED){
            for (i = 1; i <= size; i++) {
                System.out.print(" " + i);
            }
            System.out.println();
        }
    }

【讨论】:

    【解决方案2】:

    因为项目有两种状态:selecteddeselected所以itemStateChanged被触发了两次。

    请参考这个问题Why is itemStateChanged on JComboBox is called twice when changed?

    【讨论】:

      【解决方案3】:

      这是解决您的问题的方法。

       @Override
          public void itemStateChanged(ItemEvent e) {
      
            if (e.getStateChange() == ItemEvent.SELECTED) {
              size = Integer.parseInt((String)box.getSelectedItem());
              for (i = 1; i <= size; i++) {
                  System.out.print(" " + i);
              }
              System.out.println();
            }
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-12-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-11
        • 2012-04-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多