java - JScrollPane 没有出现?

标签 java swing jtable jscrollpane

为什么我的 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/

相关文章:

Java FX 多 Windows 应用程序

java - 访问 JOption Pane 的按钮以向其中添加 MouseListener

java - 如何在JTable的某一列中设置图标?

java - JButton 操作不在 JTable 内部执行

java - Android:如何告诉我的 Activity 从我的服务启动新 Activity ?

java - 如何在java中获取接口(interface)或父类(super class)的映射

java - SpEL getMethod 不起作用

java - Android ListView : how to use fast scrolling and alphabetical ordering

java - ColorPane - 可以抓取不同字符的字符串吗?

java - JTable 更新列名