绑定组合框摆动 [英] Binding comboboxes in swing
问题描述
我尝试了一个ItemEvent的解决方案,但启动我的应用程序时,我有问题加载了国家列表而不是其他列表。并且通过选择一个国家的国家列表而不是城市列表。
我的代码:
jComboBoxCountries.addItemListener(new java.awt.event.ItemListener(){
public void itemStateChanged(java.awt.event.ItemEvent evt){
jComboBoxStates.setModel (new javax.swing.DefaultComboBoxModel(
statesOf(evt.getItem())。toArray()));
}
});
jComboBoxStates.addItemListener(new java.awt.event.ItemListener(){
public void itemStateChanged(java.awt.event.ItemEvent evt){
jComboBoxCities.setModel(new javax.swing.DefaultComboBoxModel(
citiesOf(evt.getItem())。toArray()));
}
});
jComboBoxCountries.setModel(new javax.swing.DefaultComboBoxModel(
countryList.toArray()));
我的应用程序加载了国家列表而不是其他列表
好像您必须专门设置所选索引来调用监听器。
jComboBoxCountries.setModel(...)
jComboBoxCountries.setSelectedIndex(0);
通过选择一个国家/地区被列出状态,但不是列出城市。
我猜这是同样的问题,一旦您重置状态组合框的模型,您需要选择其索引也是。
另一种方法是不选择默认状态或城市,而是提示用户选择一个。以下是使用这种方法的一些代码:
import java.awt。*;
import java.awt.event。*;
import java.util。*;
import javax.swing。*;
public class ComboBoxTwo扩展JFrame实现ActionListener
{
private JComboBox mainComboBox;
私人JComboBox subComboBox;
private Hashtable subItems = new Hashtable();
public ComboBoxTwo()
{
String [] items = {选择项目,颜色,形状,水果};
mainComboBox = new JComboBox(items);
mainComboBox.addActionListener(this);
//当使用向上/向下箭头键时,阻止动作事件触发
// mainComboBox.putClientProperty(JComboBox.isTableCellEditor,Boolean.TRUE);
getContentPane()。add(mainComboBox,BorderLayout.WEST);
//创建具有多个模型的子组合框
subComboBox = new JComboBox();
subComboBox.setPrototypeDisplayValue(XXXXXXXXXX); // JDK1.4
getContentPane()。add(subComboBox,BorderLayout.EAST);
String [] subItems1 = {选择颜色,红色,蓝色,绿色};
subItems.put(items [1],subItems1);
String [] subItems2 = {选择形状,圆形,方形,三角形};
subItems.put(items [2],subItems2);
String [] subItems3 = {选择水果,苹果,橙色,香蕉};
subItems.put(items [3],subItems3);
mainComboBox.setSelectedIndex(1);
}
public void actionPerformed(ActionEvent e)
{
String item =(String)mainComboBox.getSelectedItem();
Object o = subItems.get(item);
if(o == null)
{
subComboBox.setModel(new DefaultComboBoxModel());
}
else
{
subComboBox.setModel(new DefaultComboBoxModel((String [])o));
}
}
public static void main(String [] args)
{
JFrame frame = new ComboBoxTwo();
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
I'm working on a desktop (swing) application with Eclipse IDE. I have three comboboxes (countries, states and cities) and I need to update the data automatically when I selecting a new country or province. I searched lot of information, but all the implementations I found are made on Ajax or the beansbinding framework in NetBeans. I tried a solution by ItemEvent, but I have problems starting my application it loads the list of countries but not the other lists. And by selecting a country is charged the list of states but not the list of cities.
My code:
jComboBoxCountries.addItemListener(new java.awt.event.ItemListener() {
public void itemStateChanged(java.awt.event.ItemEvent evt) {
jComboBoxStates.setModel(new javax.swing.DefaultComboBoxModel(
statesOf(evt.getItem()).toArray() ));
}
});
jComboBoxStates.addItemListener(new java.awt.event.ItemListener() {
public void itemStateChanged(java.awt.event.ItemEvent evt) {
jComboBoxCities.setModel(new javax.swing.DefaultComboBoxModel(
citiesOf(evt.getItem()).toArray()) );
}
});
jComboBoxCountries.setModel(new javax.swing.DefaultComboBoxModel(
countryList.toArray()));
I have problems starting my application it loads the list of countries but not the other lists
It seems like you have to specifically set the selected index to invoke the listener.
jComboBoxCountries.setModel(...)
jComboBoxCountries.setSelectedIndex(0);
And by selecting a country is charged the list of states but not the list of cities.
I would guess this is the same problem, once you reset the model of the states combobox you would need to select its index as well.
Another approach is to not select a default state or city, but instead prompt the user to select one. Here is some code that uses this approach:
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
public class ComboBoxTwo extends JFrame implements ActionListener
{
private JComboBox mainComboBox;
private JComboBox subComboBox;
private Hashtable subItems = new Hashtable();
public ComboBoxTwo()
{
String[] items = { "Select Item", "Color", "Shape", "Fruit" };
mainComboBox = new JComboBox( items );
mainComboBox.addActionListener( this );
// prevent action events from being fired when the up/down arrow keys are used
// mainComboBox.putClientProperty("JComboBox.isTableCellEditor", Boolean.TRUE);
getContentPane().add( mainComboBox, BorderLayout.WEST );
// Create sub combo box with multiple models
subComboBox = new JComboBox();
subComboBox.setPrototypeDisplayValue("XXXXXXXXXX"); // JDK1.4
getContentPane().add( subComboBox, BorderLayout.EAST );
String[] subItems1 = { "Select Color", "Red", "Blue", "Green" };
subItems.put(items[1], subItems1);
String[] subItems2 = { "Select Shape", "Circle", "Square", "Triangle" };
subItems.put(items[2], subItems2);
String[] subItems3 = { "Select Fruit", "Apple", "Orange", "Banana" };
subItems.put(items[3], subItems3);
mainComboBox.setSelectedIndex(1);
}
public void actionPerformed(ActionEvent e)
{
String item = (String)mainComboBox.getSelectedItem();
Object o = subItems.get( item );
if (o == null)
{
subComboBox.setModel( new DefaultComboBoxModel() );
}
else
{
subComboBox.setModel( new DefaultComboBoxModel( (String[])o ) );
}
}
public static void main(String[] args)
{
JFrame frame = new ComboBoxTwo();
frame.setDefaultCloseOperation( EXIT_ON_CLOSE );
frame.pack();
frame.setLocationRelativeTo( null );
frame.setVisible( true );
}
}
这篇关于绑定组合框摆动的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!