为什么我的 JScrollPane 没有显示?如果我用表格(注释部分)执行此操作,它可以正常工作,但是当我将其放入滚动 Pane (我也需要,数据库真的很长)时,它永远不会出现,任何人都可以帮助我吗? :o)
代码如下:
JButton btnRefresh = new JButton("Refresh");
btnRefresh.setBounds(130, 35, 80, 30);
btnRefresh.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try{
ResultSet r = s.executeQuery("Select * From "+comboBox.getSelectedItem());
int rows = 0;
while ( r.next ( ) ) rows++;
r.first();
int cols = r.getMetaData().getColumnCount();
String columnNames[ ] = new String [ cols ];
for ( int i = 0; i < columnNames.length; i++ )
columnNames [ i ] = r.getMetaData().getColumnName(i + 1);
for ( int i = 0; i < columnNames.length; i ++ )
System.out.print( columnNames[i] + " " );
r.first();
int i = 1;
while(r.next()){
for ( int j = 0; j < cols; j++ ){
rowData[i][j] = r.getString(j+1);
}
i++;
}
table = new JTable( rowData, columnNames);
//table.setBounds ( 10, 95, 770, 560 );
scrollPane = new JScrollPane(table);
//browserPanel.add( table);
browserPanel.add(scrollPane);
//table.repaint();
scrollPane.repaint();
//table.setVisible(true);
scrollPane.setVisible( true );
browserPanel.revalidate();
browserPanel.repaint();
}
catch(Exception x){
JOptionPane.showMessageDialog(null, "Not Found");
x.printStackTrace();
}
}
});
browserPanel.add(btnRefresh);
最佳答案
这里:
browserPanel.add(scrollPane);
如果browserPanel
已经显示,那么您应该调用revalidate()添加滚动 Pane 后的方法,如下所示:
browserPanel.add(scrollPane);
browserPanel.revalidate();
browserPanel.repaint();
来自Container.add() javadoc:
This method changes layout-related information, and therefore, invalidates the component hierarchy. If the container has already been displayed, the hierarchy must be validated thereafter in order to display the added component.
其他一些提示:
正如@Andrew所说,在启动时添加表格和滚动 Pane 通常更容易。然后,当数据库访问完成后,使用
ResultSet
设置一个新模型Swing 组件必须在 Event Dispatch Thread 中创建和更新。 .
如果您确实这样做,那么您应该避免在 EDT 中进行数据库调用。这些应该在单独的线程中完成,例如使用 SwingWorker这确保繁重的任务在单独的线程中完成,并且 GUI 更新在 EDT 中执行。
关于java - JScrollPane 没有出现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20061200/