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

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

像这样,先是显示会员界面,然后点击切换图书界面后所出现的画面重叠,这种问题最好的解决方式就是套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) { }
这里的解决方案如下:

在全局放置 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) { }
教程结束