删除或隐藏JScrollPane错误

时间:2015-12-01 12:17:09

标签: java swing

我有这个程序,它有一个按钮,可以从数据库中提取数据。问题是它必须检查数据库中的数据。如果有数据,则以表格形式显示。如果不是,则显示一条消息(在JLabel中),表示不存在任何数据。到现在为止还挺好。问题是,在查看表之后,然后从数据库中删除所有数据,它表明没有数据存在。但是,桌子还在那里。我仍然可以看到它,它拒绝被删除。为什么呢?

这是代码:

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:我添加了完整的事件代码。

2 个答案:

答案 0 :(得分:2)

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

JScrollPane scrollPane = new JScrollPane(table);

不要创建新的JScrollPane。创建GUI时,将滚动窗格添加到框架中。

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

scrollPane.setViewportView( theComponent );

答案 1 :(得分:0)

我所知道的是,在setVisible之前删除会使setvisible无效。

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

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

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

}