我有这个程序,它有一个按钮,可以从数据库中提取数据。问题是它必须检查数据库中的数据。如果有数据,则以表格形式显示。如果不是,则显示一条消息(在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:我添加了完整的事件代码。
答案 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();
}