Java Swing动态JComboBox

时间:2011-09-15 07:52:03

标签: java swing jcombobox

我已经从数据库中填充了一个组合框 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));                   
            }                   
        }
    }           
});

第一个组合框从数据库中填充,但在从中选择任何项目后,第二个组合框保持为空。

为什么调试我的电脑会挂起?

3 个答案:

答案 0 :(得分:2)

您必须实施ComboBoxModel并在Items中添加/删除/更改Model,而不是在JComboBox中,也不在Array中的某处, ListVector,确定可以,但您必须在EDT上执行代码并始终将ArrayListVector替换为混凝土{{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,全屏也是如此)。