Java Swing动态JComboBox

Java Swing动态JComboBox,java,swing,jcombobox,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"); } combob

我已经从数据库中填充了一个组合框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));                   
            }                   
        }
    }           
});
ArrayList1=//在数据库连接类()中调用方法
对于(int j=0;j
第一个组合框从数据库中填充,但从中选择任何项后,第二个组合框保持为空

为什么调试这台我的计算机会挂起?

您必须在
模型中实现并添加/删除/更改
项,而不是在
JComboBox中,也不是在
数组中的某个地方,
列表中或
向量中,当然可以,但您必须在EDT上执行代码,并且始终替换
数组
列表
向量
,对于具体的
JComboBox
,不要这样做:-)

也许你有问题,也许改变已经完成,但在EDT之外,更多关于你的问题和建议

n ma问题得到解决……

您必须阅读:

它将帮助您处理java组合框

似乎您应该使用ActionListener作为事件来填充第二个组合框

对于调试问题,您应该从java bugtracker中进行检查

-Dsun.awt.disablegrab=true
应该解决您的调试问题(自2008年起)

请参阅无法在2007年的旧JDK上工作相关说明:

经过讨论,我们得出结论,这(组合框事件上的调试)只是一个地方,而不是一个地方 明智地在调试器中停止(对于DnD,全屏也是如此)


问题:在调用DB之后,您是否检查了Array_list2是否不为空?在这里添加跟踪可以确保问题不在示例中未显示的代码中(DB方法).但当我要调试它时,它将挂起ma计算机??那么我如何调试它?请学习java命名约定并遵守它们。我同意你的观点,但我是随机提出的。我会记住diz。@Geetanjali你不需要从IDE执行调试,使用
System.out.println(…)
的简单跟踪就足够了,我们只想确保
ArrayList2
不是空的。+1用于建议使用模型。但是我认为这并不能解决问题。更改是在EDT内部完成的,因为代码是从
itemstener
执行的;因此,在该示例中没有具体的线程问题(除了DB访问最好使用
SwingWorker
执行,但这不是问题的根源)。
-Dsun.awt.disablegrab=true