关于JTable的一个问题

apple_wzy 2011-12-05 07:46:34
首先,我写了一个类继承于AbstractedTableModel,然后重写了6个方法
然后用JScrollPane实例化了一个对象
问题是这样,我是直接对数据库进行操作,
插入数据,发现已经插入成绩,直接将数据从数据库中读出更新了JTable
发现,当运行时,假设JTable有2行数据,我增加一行数据,在数据库中有数据,然而在JTable中没有显示出来
然后我去删除两行中的一行数据,发现,删除那行数据之后,前面增加的那行数据显示出来了.
意思就是我初始化的时候是显示2行数据,后面增加行数时,它不能增加
当我删除某一行之后,它能再显示出来,但运行过程中始终无法超过初始化时的行数(像我举例中说的2行)

求教大牛了.俺初学者!

package tools;

import javax.swing.table.AbstractTableModel;

public class StuTable extends AbstractTableModel {

public StuTable(){

}

@Override
public int getColumnCount() {
// TODO Auto-generated method stub
return this.tableHead.size();
}

@Override
public int getRowCount() {
// TODO Auto-generated method stub
return this.tableData.size();
}

@Override
public Object getValueAt(int row, int col) {
// TODO Auto-generated method stub
return this.tableData.get(row).get(col);
}

public String getColumnName(int col){
return this.tableHead.get(col);
}

@Override
public Class<?> getColumnClass(int col) {
// TODO Auto-generated method stub
return this.getValueAt(0, col).getClass();
}

@Override
public boolean isCellEditable(int row, int col) {
// TODO Auto-generated method stub
return false;
}

@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
// TODO Auto-generated method stub
this.tableData.get(rowIndex).set(columnIndex, aValue);
}



然后用JScrollPane实例化了一个对象

public class BrowsePanel extends JScrollPane {

private StuTable tableModel = null;
private JTable table = null;
private JScrollPane pane = null;

public BrowsePanel(){
tableModel = new StuTable();
table = new JTable();
table.setModel(tableModel);
this.setBorder(BorderFactory.createTitledBorder("浏览学生信息"));
this.setViewportView(table);
this.updateUI();
}

public void freshUI(){
table.setModel(tableModel);
this.updateUI();
}

public StuTable getTableModel() {
return tableModel;
}

public JTable getTable() {
return table;
}

}
...全文
112 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
apple_wzy 2011-12-07
  • 打赏
  • 举报
回复
我已经解决了.原来updateUI()是不够的
table.invalidate();
table.repaint();
需要再加上这两句
huntor 2011-12-07
  • 打赏
  • 举报
回复
先看过 src.zip 里的 javax/swing/table/DefaultTableModel.java 再写自己的 TableModel实现。
apple_wzy 2011-12-06
  • 打赏
  • 举报
回复
求教大家呀
apple_wzy 2011-12-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 huntor 的回复:]

@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
// TODO Auto-generated method stub
this.tableData.get(rowIndex).set(columnIndex, aValue);
……
[/Quote]
刚加上这一句,也是不行!
apple_wzy 2011-12-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wang7535067 的回复:]

不能同时更新数据,那就你每操作一次,就是设置下模型,就可以了。
[/Quote]
有的,有重新设置模型!

public void freshUI(){
table.setModel(tableModel);
this.updateUI();
}
huntor 2011-12-05
  • 打赏
  • 举报
回复
@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
// TODO Auto-generated method stub
this.tableData.get(rowIndex).set(columnIndex, aValue);
this.fireTableCellUpdated(rowIndex,columnIndex);
}

你可以看看 jdk 中 DefaultTableModel是怎么写的。
wang7535067 2011-12-05
  • 打赏
  • 举报
回复
不能同时更新数据,那就你每操作一次,就是设置下模型,就可以了。

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧