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

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

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

提前谢谢您。

最佳答案

Why wont the list box show up? What am I doing wrong?

因为这个:

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

这些行表明,当您尝试通过单击按钮将 JList 添加到其中时,jPanel4 已经显示,因此 invalidating the components hierarchy因此,您必须重新验证并重新绘制面板,如下所示:

 jPanel4.add(accList, BorderLayout.CENTER);
 jPanel4.revalidate();
 jPanel4.repaint();

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

参见How to Use Lists教程。

其他说明

请注意,数据库调用是一项耗时的任务,并且可能会阻塞 Event Dispatch Thread (EDT)导致 GUI 变得无响应。 EDT 是一个单独的特殊线程,Swing 组件在其中进行创建和更新。为了避免阻塞此线程,请考虑使用 SwingWorker在后台线程中执行数据库调用并在 EDT 中更新 Swing 组件。查看更多Concurrency in Swing教训。

关于java - 在 netbeans 中使用 java 不显示列表框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26611668/

相关文章:

java - 初始化主 GUI 时可见的 JProgressBar

java - 在基于 JEditorPane 的浏览器中启用 javascript 的代码

java - 如何在 Netbeans 中设置 JList 的 ListModel?

java - 如何在android中以定义的间隔填充 ListView 中的文本字符串?

java - 使用 XSLT 模板从一个 JAXB 对象转换为另一个 JAXB 对象

java - 可以以某种方式简化此循环代码吗?

JAVA JNA WindowProc 实现

java - 如何使这些数据类型在屏幕上显示它们的值?

java - 在 JList 中添加并显示对象

java - JLists 中 JButton 监听器事件的多个实例