如何使用另一个组合框控制组合框?

时间:2017-05-11 06:58:02

标签: java swing jcombobox

enter image description here

我想要的是当我点击主题组合框时,Batch Name:组合框应根据主题选择而改变。我试过这个,但没有任何反应。此代码在Subject Name:组合框操作执行功能中。

private void combosubjActionPerformed(java.awt.event.ActionEvent evt) {                                          
 String sub= evt.getSource().toString();
 try {
   btchcombo.removeAllItems();
   Connection conn = getConnection();
   PreparedStatement prpd = conn.prepareStatement("SELECT batch FROM BATCHLIST where subject=?");
   prpd.setString(1,sub);
   ResultSet rs = prpd.executeQuery();
   while (rs.next()) {
     String pat = rs.getString("BATCH");
     btchcombo.addItem(pat);
   }
   } catch (Exception e) {
     e.printStackTrace();
     JOptionPane.showMessageDialog(null, e);
   }    
 }                                       

1 个答案:

答案 0 :(得分:1)

不是那么简单。只是调用actionPerformed()仅仅不足以更新组合框数据;以及该事物的UI表示。

您想在此处查看此question以获取完成所需的详细信息。

但除此之外:你应该回到这里,并做一些阅读如何正确构建连接到数据库的UI应用程序。对于ActionListener来说,直接从数据库中提取数据绝对是错误

首先,这违反了分层的任何想法。您在UI和数据库之间添加了抽象。见herethere进一步阅读。

然后:所谓的事件调度程序线程调用{{1}}方法。该主题适用于调度事件。您不应该“占用它”来调用数据库。你知道,如果你的数据库连接耗尽,该怎么办?那个DB代码......在那里坐了一会儿,等着轮到他了?这将导致您的UI 冻结,因为负责保持用户界面的线程......坐在那里等待您的数据库。

长话短说:看起来你自己负担过重了。你应该退一步,花一些时间学习这些方面。否则,你的工作结果将是错误的,没有人会想要使用它。