如何解决java_GUI中Jtable表格重叠问题

直接使用JScrollPane套Jtable最容易出现的问题就是重叠问题,上图:

此图像的alt属性为空;文件名为image-8.png

像这样,先是显示会员界面,然后点击切换图书界面后所出现的画面重叠,这种问题最好的解决方式就是套DefaultTableModel,让Jtable与DefaultTableModel处于全局状态,到时候直接更改横项与纵向数据就行。

这是有重叠问题的代码:

try {
String[][] columnDate = new String[99][9];
String[] lib = {"图书编号", "图书类型", "图书简介", "图书作者", "图书出版社", "出版时间","是否借出"};
Statement stmt = mysql.conn.createStatement();
ResultSet rs = stmt.executeQuery("select * from book");
int col=0;
while (rs.next()) {//rs一列一列循环输出
 String bookid = rs.getString("图书编号");
String bookname = rs.getString("图书类型");
String bookleixing = rs.getString("图书简介");
String bookjianjie = rs.getString("图书作者");
String bookroot = rs.getString("图书出版社");
String booka = rs.getString("出版时间");
String bookxy = rs.getString("是否借出");
columnDate[col][0] = bookid;
columnDate[col][1] = bookname;
columnDate[col][2] = bookleixing;
columnDate[col][3] = bookjianjie;
columnDate[col][4] = bookroot;
columnDate[col][5] = booka;
columnDate[col][6] = bookxy;
col++;
}
JTable table= new JTable(columnDate, lib);
table.getColumnModel().getColumn(0).setPreferredWidth(40);
// 设置第二列宽度为120
table.getColumnModel().getColumn(1).setPreferredWidth(120);
JScrollPane scrollPane = new JScrollPane(table);
panel.add(scrollPane);
scrollPane.setBounds(10,70,765,500);
DefaultTableCellRenderer r = new DefaultTableCellRenderer();
r.setHorizontalAlignment(JLabel.CENTER);
table.setDefaultRenderer(Object.class, r);
}
catch (SQLException e2)
{
}

这里的解决方案如下:

此图像的alt属性为空;文件名为image-10.png
在全局放置
public JTable table = null;
private DefaultTableModel tmModel = null;

tmModel = new DefaultTableModel();
tmModel.setDataVector(columnDate, lib);//让表格数据写入DefaultTableModel
table= new JTable(tmModel);//JTable再调用DefaultTableModel
table.getColumnModel().getColumn(0).setPreferredWidth(40);
// 设置第二列宽度为120
table.getColumnModel().getColumn(1).setPreferredWidth(120);
JScrollPane scrollPane = new JScrollPane(table);
panel.add(scrollPane);
scrollPane.setBounds(10,70,765,500);
DefaultTableCellRenderer r = new DefaultTableCellRenderer();
r.setHorizontalAlignment(JLabel.CENTER);
table.setDefaultRenderer(Object.class, r);

这样之后再点击切换后执行如下代码就行了;

tmModel.setDataVector(columnDate, lib);使用这一段就直接可以更换表格中的数据。

点击切换后执行的代码:

try {
String[][] columnDate = new String[99][9];
String[] lib = {"id", "昵称", "账号", "密码", "注册日期", "是否管理员"};
Statement stmt = mysql.conn.createStatement();
ResultSet rs = stmt.executeQuery("select * from user");
int col=0;
while (rs.next()) {//rs一列一列循环输出
 String bookid = rs.getString("id");
String bookname = rs.getString("昵称");
String bookleixing = rs.getString("账号");
String bookjianjie = rs.getString("密码");
String bookroot = rs.getString("注册日期");
String booka = rs.getString("是否管理员");
columnDate[col][0] = bookid;
columnDate[col][1] = bookname;
columnDate[col][2] = bookleixing;
columnDate[col][3] = bookjianjie;
columnDate[col][4] = bookroot;
columnDate[col][5] = booka;
col++;
}
tmModel.setDataVector(columnDate, lib);
}
catch (SQLException e1)
{
}

教程结束

发表评论

电子邮件地址不会被公开。 必填项已用*标注