java - 删除或隐藏 JScrollPane 错误

标签 java swing

我有一个程序,它有一个按钮,可以从数据库中获取数据。问题是它必须检查数据库中的数据。如果有数据,则以表格的形式显示。如果没有,则显示一条消息(在 JLabel 中),表明不存在数据。到目前为止,一切都很好。问题是,查看表后,然后从数据库中删除所有数据,它显示没有数据存在。但是, table 还在。我仍然可以看到它,并且它拒绝被删除。为什么?

代码如下:

else if(ae.getSource()==Test)
{

    try
    {   

        JTable table = new JTable();

        JScrollPane scrollPane = new JScrollPane(table);


        String query="SELECT * FROM Students ORDER BY StdID";
        rs=st.executeQuery(query);

        DefaultTableModel model = (DefaultTableModel) table.getModel();
            model.addColumn("No."); 
            model.addColumn("StdID"); 
            model.addColumn("StdName");
            model.addColumn("StdMajor");
            model.addColumn("StdGender");
            model.addColumn("StdAge");
            model.addColumn("StdEmail");
            model.addColumn("StdPhone");
            model.addColumn("RegisteredBy");
            model.addColumn("UpdatedBy");


            int result=0;



            int stdid;
            String stdname;
            String stdmajor;
            String stdgender;
            int stdage;
            String stdemail;
            String stdphone;
            String registeredby;
            String updatedby;

            while(rs.next())
            {

                result = result + 1;

                stdid = rs.getInt("StdID");
                stdname = rs.getString("StdName");              stdname = stdname.trim();
                stdmajor = rs.getString("StdMajor");            stdmajor = stdmajor.trim();
                stdgender = rs.getString("StdGender");          stdgender = stdgender.trim();
                stdage = rs.getInt("StdAge");
                stdemail = rs.getString("StdEmail");            stdemail = stdemail.trim();
                stdphone = rs.getString("StdPhone");            stdphone = stdphone.trim();
                registeredby = rs.getString("RegisteredBy");    registeredby = registeredby.trim();
                updatedby = rs.getString("UpdatedBy");


                if (!rs.wasNull())
                {   updatedby = updatedby.trim();   }

                else
                {   updatedby = ""; }


                DisplayStatus.setText(stdname);
                model.addRow(new Object[] { result, stdid, stdname, stdmajor, stdgender, stdage, stdemail, stdphone, registeredby, updatedby });

            }


            if(result>0)
            {

                DisplayStatus.setText("");


                JPanel LeftGap = new JPanel();
                    LeftGap.setBackground(Color.WHITE);
                    LeftGap.setPreferredSize(new Dimension(20, 0)); 

                JPanel RightGap = new JPanel();
                    RightGap.setBackground(Color.WHITE);                    
                    RightGap.setPreferredSize(new Dimension(20, 0));        


                JPanel BottomGap = new JPanel();
                    BottomGap.setBackground(Color.WHITE);
                    BottomGap.setPreferredSize(new Dimension(0, 20));



                table.getColumnModel().getColumn(0).setPreferredWidth(10);      // No. Column                    
                table.getColumnModel().getColumn(1).setPreferredWidth(35);      // StdID Column     
                table.getColumnModel().getColumn(3).setPreferredWidth(30);      // StdMajor Column
                table.getColumnModel().getColumn(4).setPreferredWidth(30);      // StdGender Column
                table.getColumnModel().getColumn(5).setPreferredWidth(10);      // StdAge Column
                table.getColumnModel().getColumn(6).setPreferredWidth(130);     // StdEmail Column
                table.getColumnModel().getColumn(7).setPreferredWidth(50);      // StdPhone Column


                DisplayTab.add(LeftGap, BorderLayout.LINE_START);
                DisplayTab.add(RightGap, BorderLayout.LINE_END);
                DisplayTab.add(BottomGap, BorderLayout.PAGE_END);
                DisplayTab.add(scrollPane, BorderLayout.CENTER);


        }


        if(result <= 0)
        {
            //DisplayTab.remove(scrollPane);
            scrollPane.setVisible(false);

            DisplayStatus.setText("<html> <body bgcolor=C6C4C4> <font color=red style=font-size:35> There is no data in the database. </font> </body> </html>");
            DisplayStatus.setHorizontalAlignment(JLabel.CENTER);
            DisplayStatus.setVerticalAlignment(JLabel.CENTER);

            DisplayTab.revalidate();
            DisplayTab.repaint();


        }
        }

        catch(Exception e)
        { e.printStackTrace(); }
    }

更新#1:我添加了完整的事件代码。

最佳答案

首先,变量名称不应以大写字符开头。它弄乱了论坛中突出显示的代码。关注Java Conventions .

JScrollPane scrollPane = new JScrollPane(table);

不要创建新的 JScrollPane。创建 GUI 时将滚动 Pane 添加到框架。

然后,当您想要更改滚动 Pane 中显示的组件时,您只需使用:

scrollPane.setViewportView( theComponent );

关于java - 删除或隐藏 JScrollPane 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34020271/

相关文章:

java - 在Swing中,有没有办法从工具包中提取预定义的鼠标光标图像?

java - 为什么 JTable 在 ChangeSelection 后不更新渲染器

java - 通过单击 JPanel 获取 JPanel[][] 坐标

Java ExecutorService 用法

java - 如何在面板上画一个椭圆?

java - Web 服务安全性 - 什么就足够了?

java - 在 Web 容器 (Tomcat) 中动态加载或替换 jar

java - 如何在 java 的 JApplet 中添加而不是重新绘制绘图?

java - 输出说明

java - Android ReSTLet 框架 - 获取文件列表并下载文件