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

标签 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);
   }    
 }                                       

最佳答案

事情没那么简单。仅调用 addItem() 根本不足以更新组合框数据;以及该事物的 UI 表示。

您想查看此question此处了解完成该操作所需的详细信息。

但除此之外:您确实应该退后一步,阅读一下如何正确构建连接到数据库的 UI 应用程序。 ActionListener 直接从数据库中提取数据是绝对错误的!

首先,这违反了分层的任何想法。您可以在 UI 和数据库之间添加抽象。请参阅here或者 there供进一步阅读。

然后:actionPerformed() 方法由所谓的事件调度程序线程调用。该线程用于调度事件。您不应该“占用它”来调用数据库。你知道,如果数据库连接用完怎么办?那个 DB 代码……在那里呆了一分钟,等待轮到它?这将导致您的 UI 卡住,因为负责保持 UI 运行的线程...坐在那里等待您的数据库。

长话短说:看来你给自己带来了过重的负担。您应该退一步,花相当多的时间学习这些方面。否则,你的工作结果将会有问题,并且没有人会愿意使用它。

关于java - 如何使用另一个组合框控制一个组合框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43908538/

相关文章:

java - 为什么没有像Java这样的其他语言的虚拟机?

java - 为什么异常完成前调用get()会等待异常执行?

java - 是否可以删除 JInternalFrame 中的小下拉箭头?

java - 无法按链顺序正确关闭 JOptionPane

java - JComboBox 设置 selectedItem 不起作用

java - 如何让 DateTimeFormat 与 Spring MVC 一起工作?

java - 允许使用编码包装器在日志记录输出中使用尖括号

java - 从另一个类追加 jtextarea

java - 从 JComboBox 获取值时出错

java - 单击边框时 JComboBox 弹出窗口立即出现和隐藏(糟糕的用户体验)