Java Swing Combobox removeAllItems调用ItemStateChanged也?

gum*_*ruh 2 java methods swing jcombobox comboboxmodel

我的代码实际上非常简单.我看到了一个简单而类似的代码是从这篇文章.

起初,我有1个组合框.我有一个名为itemStateChanged()的监听器.我加入这个监听器的目的是:" 当用户从其保管箱中点击(选择)一个项目时执行一些代码 ".

Cmb_ItemCategory = new javax.swing.JComboBox();

Cmb_ItemCategory.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Loading..." }));

Cmb_ItemCategory.addItemListener(new java.awt.event.ItemListener() {
    public void itemStateChanged(java.awt.event.ItemEvent evt) {
        Cmb_ItemCategoryItemStateChanged(evt);
    }
});

private void Cmb_ItemCategoryItemStateChanged(java.awt.event.ItemEvent evt) {

        if(evt.getStateChange() == java.awt.event.ItemEvent.SELECTED){
        System.err.println("Sombody click or change my model content");
        }

    }
Run Code Online (Sandbox Code Playgroud)

在代码后面,我获取一些数据,然后调用removeAllItems()方法.然后我将新模型(从新数据)设置到其中.

-- at another line of code ---
Cmb_ItemCategory.removeAllItems();
Cmb_ItemCategory.setModel(newModel);
Run Code Online (Sandbox Code Playgroud)

我juz意识到当我执行removeAllItem()方法时调用了我的itemStateChanged().叫了一次.

那么,如何使它只调用一次用户单击(选择)而不是当removeAllItems()调用时?

它类似于这篇文章.但它不是removeItems案例.CMIIW.

nIc*_*cOw 5

在这里检查这个代码,这完美无缺,可能是你在调用时做错了什么removeAllItems():

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class ComboState 
{
    private void createAndDisplayGUI()
    {
        JFrame frame = new JFrame("Combo State Testing : ");
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        final JComboBox cbox = new JComboBox();
        cbox.addItem("One");
        cbox.addItem("Two");
        cbox.addItem("Three");
        cbox.addItem("Four");
        cbox.addItemListener(new ItemListener()
        {
            public void itemStateChanged(ItemEvent ie)
            {
                if (ie.getStateChange() == ItemEvent.SELECTED)
                {
                    System.out.println("Item Selected is : " + ie.getItem());
                }
                /*else
                {
                    System.out.println("I am called for other reasons.");
                }*/
            }
        });

        /*
         * Click me to remove JComboBox's items.
         */
        JButton removeButton = new JButton("REMOVE");
        removeButton.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent ae)
            {
                cbox.removeAllItems();
            }
        });

        frame.add(cbox, BorderLayout.CENTER);
        frame.add(removeButton, BorderLayout.PAGE_END);
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

    public static void main(String... args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            public void run()
            {
                new ComboState().createAndDisplayGUI();
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

  • SSCCE为+1.使开始调试变得容易 (3认同)