列表框不会在netbeans中使用java显示

时间:2014-10-28 15:04:46

标签: java swing jlist

所以我有下面的代码,当按下按钮时执行。我使用Netbeans中的GUI构建器设计了其余的GUI。

    private void populateBtnActionPerformed(java.awt.event.ActionEvent evt) {                                            
        String query = "SELECT AccNo from accounts";
        try{
            connect.rs = connect.st.executeQuery(query);
            Vector<String> temp = new Vector<String>();

            while (connect.rs.next()){
                temp.add(connect.rs.getString("AccNo"));
            }

            JList accList = new JList(temp);
            jPanel4.add(accList, BorderLayout.CENTER);

        }catch(Exception e){
            JOptionPane.showMessageDialog(null, e);
    }
  }  

为什么列表框不显示?我做错了什么?

提前谢谢。

1 个答案:

答案 0 :(得分:3)

  

为什么列表框不显示?我做错了什么?

因此:

JList accList = new JList(temp);
jPanel4.add(accList, BorderLayout.CENTER);

这些行显示,当您尝试通过点击按钮向jPanel4添加JList时, jPanel4.add(accList, BorderLayout.CENTER); jPanel4.revalidate(); jPanel4.repaint(); 已经显示{{1}},因此您必须重新验证并重新粉刷这样的面板:

{{1}}

然而,虽然我们可以在Swing中动态添加组件,但我们会在顶级容器(窗口)可见之前将所有组件放置。在这种情况下,您应该在初始化组件时放置列表(不要忘记滚动窗格)并在按下按钮时更新其模型。

请参阅invalidating the components hierarchy教程。

其他说明

请注意,数据库调用是耗时的任务,可能会阻止导致GUI无响应的How to Use Lists。 EDT是一个单独的特殊线程,可以在其中创建和更新Swing组件。为避免阻塞此线程,请考虑使用Event Dispatch Thread (EDT)在后台线程中执行数据库调用并更新EDT中的Swing组件。请参阅SwingWorker课程中的更多内容。