java:JTable如何重新指定行数据?

已经指定行数据和列首名来新建了一个JTable组件,后来响应事件需要重新指定一个两维数组来作为它的行数据,列首名可以不变,请问用什么方法能做到?(请给出具体的例子)谢谢了... 已经指定行数据和列首名来新建了一个JTable组件,后来响应事件需要重新指定一个两维数组来作为它的行数据,列首名可以不变,请问用什么方法能做到?(请给出具体的例子)谢谢了!!如果可以会追加分!!!!! 展开
 我来答
百度网友6d408b6
2011-03-13 · TA获得超过1726个赞
知道小有建树答主
回答量:402
采纳率:0%
帮助的人:478万
展开全部
替楼上的补充:一般符合MVC pattern构建的Table都是其TableModel的一个listener,所以model里内容改变后只要通知作为view的table。

目前版本的javax.swing.table.TableModel接口只有获取其listener的接口,没有规范具体通知的接口,但在AbstractTableModel类里就实现了如下通知接口:

public void fireTableChanged(TableModelEvent e);
public void fireTableStructureChanged();
public void fireTableRowsUpdated(int firstRow, int lastRow);
public void fireTableRowsInserted(int firstRow, int lastRow);
public void fireTableRowsDeleted(int firstRow, int lastRow);
public void fireTableCellUpdated(int row, int column);
public void fireTableDataChanged();

在作为TableModel的listner,JTable是实现了TableModelListener中定义的接受和处理来自model通知的接口的,就是
public void tableChanged(TableModelEvent e); 事实上AbstractTableModel上述的几个通知方法内部实现中都回调用其listener的这个方法。

根据你的情况,在重新设定二维表后,该tablemodel可以fire相应的消息,比如若连column数目都变掉的话,则调用最彻底的fireTableStructureChanged,但相应计算开销会大。 如果没有model view分得那么清,那么直接相当于从cotroller调用view的tablechange(...)方法也是可以的。

需要注意的是JTable的tablechange()的实现虽然一般情况下是够用了,但有时候需要重载自己写。比如若table的column不是根据tablemodel自动生成的,而是自己修改过了columnmodel,即JTable的autoCreateColumnsFromModel为false,那么当model的column增加的时候,JTable的实现不会自动显示增加的那个列,需要重载自己写。
百度网友032d5b216
推荐于2016-01-06 · TA获得超过173个赞
知道小有建树答主
回答量:83
采纳率:0%
帮助的人:94.6万
展开全部
这个不难,呵呵,这是俺的一种解决办法,希望对你有所帮助:
package com.test;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

/**
* @author xixi
*
*/
public class JTableTest extends JFrame{
public static void main(String[] args) {
JFrame f=new JTableTest();
f.setBounds(100, 100, 300, 251);
f.setVisible(true);
}

private JTable table ;
private DefaultTableModel tableModel;
private Object data[][];
private String title[]={"title1","title2","title3"};
{ data=new Object[2][3];
tableModel = new DefaultTableModel(data,title);
table = new JTable(tableModel);
JButton refreshDataButton=new JButton("刷新数据");
refreshDataButton.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
java.util.Random r = new java.util.Random();
data = new Object[][]{
{r.nextInt(),r.nextInt(),r.nextInt()}
,{r.nextInt(),r.nextInt(),r.nextInt()}
,{r.nextInt(),r.nextInt(),r.nextInt()}
,{r.nextInt(),r.nextInt(),r.nextInt()}
};
tableModel.setDataVector(data, title);//这一行是关键
}
});
JScrollPane scrol=new JScrollPane(table);
Container c=getContentPane();
c.add(scrol,BorderLayout.CENTER);
c.add(refreshDataButton,BorderLayout.SOUTH);
}

}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式