我有一个程序,它有一个按钮,可以从数据库中获取数据。问题是它必须检查数据库中的数据。如果有数据,则以表格的形式显示。如果没有,则显示一条消息(在 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/