所以我有以下代码,当按下按钮时执行。我使用 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/