所以我有下面的代码,当按下按钮时执行。我使用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);
}
}
为什么列表框不显示?我做错了什么?
提前谢谢。
答案 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课程中的更多内容。