【问题标题】:JScrollPane not appearing?JScrollPane 没有出现?
【发布时间】:2013-12-02 09:28:48
【问题描述】:

为什么我的 JScrollPane 没有出现?如果我用表格(评论部分)做它工作正常,但是当我把它放到滚动窗格中(我也需要,数据库真的很长)它永远不会出现,有人可以帮助我吗? :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);

【问题讨论】:

  • 在启动时添加表格和滚动窗格通常更容易。然后当数据库访问完成后,使用ResultSet 设置一个新模型。为了尽快获得更好的帮助,请发帖SSCCE
  • “这里是真正的链接” 到上面相同代码sn-p的截图?我很高兴你不能把它包括在内!

标签: java swing jtable jscrollpane


【解决方案1】:

这里:

browserPanel.add(scrollPane);

如果browserPanel已经显示,那么你应该在添加滚动窗格后调用revalidate()方法,像这样:

browserPanel.add(scrollPane);
browserPanel.revalidate();
browserPanel.repaint();

来自Container.add()javadoc:

这个方法改变了布局相关的信息,因此, 使组件层次结构无效。 如果容器已经 显示后,层次结构必须在之后进行验证,以便 显示添加的组件。

其他一些提示:

  • 正如@Andrew 所说,在启动时添加表格和滚动窗格通常更容易。然后当数据库访问完成后,用ResultSet设置一个新模型

  • Swing 组件必须在Event Dispatch Thread 中创建和更新。

  • 如果您确实这样做了,那么您应该避免在 EDT 中进行数据库调用。这些应该在单独的线程中完成,例如使用SwingWorker,它确保在单独的线程中执行繁重的任务,并在 EDT 中执行 GUI 更新。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多