【问题标题】:How to control a combo box using another combo box? [duplicate]如何使用另一个组合框控制组合框? [复制]
【发布时间】:2017-10-10 01:12:32
【问题描述】:

我想要的是当我单击主题组合框时,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);
   }    
 }                                       

【问题讨论】:

  • 如需尽快获得更好的帮助,请发帖 minimal reproducible exampleShort, Self Contained, Correct Example。硬编码一些数据来替换数据库。
  • BTW - 1) combosubjActionPerformed( 看起来很可疑。你检查过这个方法实际上被调用了吗? 2) { ] String sub= evt.getSource().toString(); 那些垃圾甚至无法编译。不要浪费您的时间,或者更重要的是我们的时间,张贴所用代码的“近照”。复制/粘贴您已确认的 MCVE/SSCCE 会显示错误。
  • 如果这不是重复的,请编辑您的问题以包含一个minimal reproducible example,以显示您修改后的方法。

标签: java swing jcombobox


【解决方案1】:

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

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

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

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

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

长话短说:看来您的负担过重了。您应该退后一步,并在这些方面花费相当多的时间学习。否则,您的工作结果将是错误的,并且没有人愿意使用它。

【讨论】:

    猜你喜欢
    • 2012-05-09
    • 2013-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-01
    • 1970-01-01
    • 2014-11-22
    • 1970-01-01
    相关资源
    最近更新 更多