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.
在这里检查这个代码,这完美无缺,可能是你在调用时做错了什么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)