JTable动态刷新问题,高手进,解决者500分。

nirvana_hg 2003-04-11 04:34:11
提供的资源如下:
public class x extends JFrame

AbstractTableModel dataModel;
JTable table;
String[] columnNames = { "name","age","address" };
Vector dataContainer = new Vector();

缺省model
dataModel = new AbstractTableModel() {
public int getColumnCount(){return columnNames.length;}
public String getColumnName(int col){return columnNames[col]; }
public int getRowCount(){return dataContainer.size();}
public Object getValueAt(int row, int col){
return null; };

存在一个方法dataChanged(Object data),当新数据到达时是自动调用的,来刷新JTable内容。

接到数据的类型为recordSet[],每个recordSet是一个类包括name,age,address三个变量。可用getName().getAge().getAddress()方法得到。

在下已经参考别人的例子写了一个方法来刷新JTable,但方法不可用。现在非常着急,希望高手们帮忙写个例子。测试通过500分相送!我相信上面提供的数据已经足够了。程序运行如下:
数据返回,dataChanged方法会自动调用,因此只需要写这个方法。这个方法的作用是改变当前JTable的显示,显示新的数据。在线等待,解决就给分。
(请注意,我要的是可运行代码)再次表示感谢!!!!!!!!!一定帮忙,我很信赖CSDN,希望不要让我失望!!
...全文
316 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
nirvana_hg 2003-04-11
  • 打赏
  • 举报
回复
谢谢各位鼎力相助,经过若干次调试,才发现关于JTable显示的代码是没有错误的,错误出在数据库查询方法设计的问题上,不过还是非常感谢各位热心的高手帮忙。在此对给大家带来的麻烦深表歉意!!!!谢谢各位!!!
scottding 2003-04-11
  • 打赏
  • 举报
回复
如果有兴趣的话,可以参考jbuild带的dbswing的源代码,我想对你帮助会很大的的。
geyf 2003-04-11
  • 打赏
  • 举报
回复
你这样做也稍微麻烦了点。
我以前做过一个,种种原因我不能给你整个代码,思路如下:
自己写个tablemode继承AbstractTableModel
除了实现那些方法外,自己写个更新数据的方法,
public myModel extends AbstractTableModel{
public Object data;
public myModel(Object _data){data=_data;}
比如public void updateData(Object _data){
data=_data;
this.fireTableChanged(null);
}
然后你要更新数据的时候,调用
table.getModel().updataData(data);就行了。

用的时候:
myModel mym=new myModel(data);
JTable t=new JTable(mym);
希望对你有帮助。
nirvana_hg 2003-04-11
  • 打赏
  • 举报
回复
我忘记加上了,应该采用fireTableXXXXXXX的方法通知JTable自动更新数据,我不太明白,但我不是要这种一行一行地setValueAt来更新数据。虽然我非常感谢您,但是你提供的方法对我方法的实现帮助不大。
我参考别人的例子,原理是AbstractTableModel从vector中获得数据,由于一开始vector是空的,因此获得数据也是空的。JTABLE就显示空,等获得数据,在dataChanged方法里把获得的数据分解到Vector里,然后调用类似fireTableDataChanged的方法通知JTABLE自动从vector里获得所有数据并更新。dataChanged(obejct data)里的参数data就是收到的recordset[]。
好了补充说明完了,希望高手帮忙。明天就是最后期限,我真的十分着急。谢谢谢谢!!!
wolfsquare 2003-04-11
  • 打赏
  • 举报
回复
在数据到达时调用JTable.repaint()
cyicecream 2003-04-11
  • 打赏
  • 举报
回复
//这个是手动更新的,你再调整一下就可以自动更新了
import javax.swing.table.AbstractTableModel;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.lang.Thread;

public class TableModel2 implements ActionListener{

JTable t = null;

public TableModel2() {

JFrame f = new JFrame("DataModel");
JButton b1 = new JButton("数学老师");
b1.addActionListener(this);
JButton b2 = new JButton("学生阿呆");
b2.addActionListener(this);
JPanel panel = new JPanel();
panel.add(b1);
panel.add(b2);

t=new JTable(new MyTable(1));
t.setPreferredScrollableViewportSize(new Dimension(550, 30));
JScrollPane s = new JScrollPane(t);

f.getContentPane().add(panel, BorderLayout.NORTH);
f.getContentPane().add(s, BorderLayout.CENTER);
f.pack();
f.setVisible(true);
t.setValueAt("sdfsfdf", 0, 0);
try{
Thread.sleep(5000);}
catch(Exception e){};
t.setValueAt("sdf", 0, 0);
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}

public void actionPerformed(ActionEvent e)
{
if (e.getActionCommand().equals("学生阿呆"))
{t.setModel(new MyTable(1)); t.setValueAt("sdf", 0, 0);}
if (e.getActionCommand().equals("数学老师"))
t.setModel(new MyTable(2));
// t.revalidate();
}

public static void main(String args[]) {

new TableModel2();

}
}

class MyTable extends AbstractTableModel{

String[] n = {"姓名","学号","数学","及格","作弊","电话"};
Object[][] p = {
{"阿呆", "1234",new Integer(50), new Boolean(false),new Boolean(false),"01234"},
{"阿瓜", "1235",new Integer(75), new Boolean(true),new Boolean(false),"05678"}};
Object[][] p1 = {
{"阿呆", "1234",new Integer(66),
new Integer(50), new Integer(116), new Boolean(false),new Boolean(false)}};

String[] n1 = {"姓名","学号","语文","数学","总分","及格","作弊"};





int model;

public MyTable(int i){
model = i;
}

public int getColumnCount() {
if(model ==1)
return n1.length;
else
return n.length;
}

public int getRowCount() {
if(model ==1)
return p1.length;
else
return p.length;
}

public String getColumnName(int col) {
if(model ==1)
return n1[col];
else
return n[col];
}

public Object getValueAt(int row, int col) {
if(model == 1)
return p1[row][col];
else
return p[row][col];
}

public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
public boolean isCellEditable(int rowIndex, int columnIndex) {
return true;
}
public void setValueAt(Object value, int row, int col) {
p1[row][col] = value;
fireTableCellUpdated(row, col);
}
}
bjzhanghao 2003-04-11
  • 打赏
  • 举报
回复
没太搞明白你的意思,参考一下试试
import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;
import java.util.*;
import java.awt.event.*;

public class Frame3 extends JFrame {
JScrollPane jScrollPane1 = new JScrollPane();
JTable jTable1 = new JTable();
DefaultTableModel dtm=null;
Vector columnNames=new Vector();
class RecordSet{
String name;
String age;
String address;
public RecordSet(String nm,String ag,String ad){
name=nm;
age=ag;
address=ad;
}
}
JButton jButton1 = new JButton();

public Frame3() {
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}
private void jbInit() throws Exception {
jButton1.setText("jButton1");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
jButton1_actionPerformed(e);
}
});
this.getContentPane().add(jScrollPane1, BorderLayout.CENTER);
this.getContentPane().add(jButton1, BorderLayout.SOUTH);
jScrollPane1.getViewport().add(jTable1, null);

columnNames.add("name");
columnNames.add("age");
columnNames.add("address");
dtm=new DefaultTableModel(columnNames,30);

jTable1.setModel(dtm);
setSize(500,400);
pack();
show();
}

public void dataChanged(Vector dc){
for(int i=0;i<dc.size();i++){
RecordSet rs=(RecordSet)dc.get(i);
dtm.setValueAt(rs.name,i,0);
dtm.setValueAt(rs.age,i,1);
dtm.setValueAt(rs.address,i,2);
}
}

public static void main(String args[]){
Frame3 f=new Frame3();
}

void jButton1_actionPerformed(ActionEvent e) {
Vector dataContainer=new Vector();
dataContainer.add(new RecordSet("mike","22","beijing"));
dataContainer.add(new RecordSet("rose","20","guangdong"));
dataContainer.add(new RecordSet("smith","25","tianjin"));
dataChanged(dataContainer);
}
}

62,614

社区成员

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

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