Java Swing动态JComboBox
我已经从数据库中填充了一个组合框B1。当itemStateChanged事件引发时,它应该填充另一个组合框B2,但它不起作用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
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