我已从数据库填充了组合框B1。当 itemStateChanged 事件引发时,它应该填充另一个组合框 B2,但它不起作用。
ArrayList1 = //call method in database connection class()
for (int j = 0; j < ArrayList1.size(); j++)
{
if (j == 0)
{
combobox1.addItem("Select Any");
}
combobox1.addItem(ArrayList1.get(j));
}
combobox1.addItemListener(new ItemListener()
{
@Override
public void itemStateChanged(ItemEvent ie)
{
String catName = (String)combobox1.getSelectedItem();
if (!catName.equalsIgnoreCase("Select Any"))
{
ArrayList2=//call method in DB class with cat_name as argument
for(int i=0;i < ArrayList2.size();i++)
{
if (i == 0)
{
combobox2.addItem("Select Any");
}
combobox2.addItem(ArrayList2.get(i));
}
}
}
});
第一个组合框从数据库中填充,但从中选择任何项目后,第二个组合框保持为空。
为什么我的电脑调试会挂起?
最佳答案
你必须实现ComboBoxModel并在 Model
中添加/删除/更改 Items
,而不是在 JComboBox
中,也不是在 Array
中的某个位置, List
或 Vector
,当然可以,但您必须在 EDT 上执行代码并始终替换 Array
、List
或具体 JComboBox
的 Vector
,不要这样做:-)
也许您对Concurency in the Swing有疑问,也许更改已经完成,但在 EDT 之外,更多关于您的问题 pass events wrapped into invokeLater()和 multiple-jcombobox
关于Java Swing动态JComboBox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7427511/