我已经从数据库中填充了一个组合框 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));
}
}
}
});
第一个组合框从数据库中填充,但在从中选择任何项目后,第二个组合框保持为空。
为什么调试我的电脑会挂起?
答案 0 :(得分:2)
您必须实施ComboBoxModel并在Items
中添加/删除/更改Model
,而不是在JComboBox
中,也不在Array
中的某处, List
或Vector
,确定可以,但您必须在EDT上执行代码并始终将Array
,List
或Vector
替换为混凝土{{1}不要这样做: - )
也许您对Concurency in the Swing有疑问,可能已做出更改,但在EDT之外,有关您的问题的更多信息pass events wrapped into invokeLater()和multiple-jcombobox
答案 1 :(得分:1)
DefaultComboBoxModel model = new DefaultComboBoxModel(yourstringarray);
item_combobox.setModel( model );
问题得到解决....
答案 2 :(得分:0)
你必须阅读:
http://docs.oracle.com/javase/tutorial/uiswing/components/combobox.html
它将帮助您处理java组合框。
似乎你应该使用ActionListener作为事件来填充第二个组合框。
对于您的调试问题,您应该从java bugtracker
检查bug 6714678-Dsun.awt.disablegrab=true
应解决您的调试问题(自2008年起)
与2007年相关的bug 6517045所说:
,看看无法使用旧的jdks经过讨论,我们得出的结论是,这个(在组合框事件上调试)只是一个地方而不是 明智地在调试器中停止(对于DnD,全屏也是如此)。