日期:2014-05-20  浏览次数:20723 次

问一个即时更新JTable中数据的方法
本人正在做一个小东西,但碰到一个问题忘高手帮忙,我建了两个类,一个是显示插入数据库数据的JTable的类,还有一个是向数据库添加数据的类,但是我每次新添加的数据能进数据库,但无法即时的在JTable中更新,要重新运行才能出来,试过调用显示插入JTable中的方法好像不行。

------解决方案--------------------
用观察者模式,JAVA有支持的.
Observable,Observer这2类查一下JDK文档吧.
------解决方案--------------------
。 我一直是用model。
你每向数据库里加一行记录。就调用model的insertRow方法。
具体查一下api的DefaultTableModel
------解决方案--------------------
最好自己写个方法如UpdateTable(),用于从数据库中重新读出JTable中的数据.
就是在修改了JTable中的数据后,再调用这个方法更新一下就行了.
我前几天写程序的时候,就遇到这样的问题.后来自己写了个重新从数据库中读数据的方法,调用这个方法就可以了.
------解决方案--------------------
我的水平只能做成这样了:

import java.awt.*;
import javax.swing.*;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.table.*;

public class Frame1
extends JFrame implements ActionListener {
public Frame1() {
try {
jbInit();
}
catch (Exception exception) {
exception.printStackTrace();
}
}

private void jbInit() throws Exception {
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jButton2.setText( "清空 ");
jButton2.addActionListener(this);
this.getContentPane().add(jPanel1, java.awt.BorderLayout.SOUTH);
jButton1.addActionListener(this);
jPanel1.add(jButton1);
jPanel1.add(jButton2);
this.getContentPane().add(jScrollPane1, java.awt.BorderLayout.CENTER);
jScrollPane1.getViewport().add(jTable1);
jButton1.setText( "添加一行 ");
this.setBounds(0, 0, 300, 300);
this.setVisible(true);
}

JPanel jPanel1 = new JPanel();
JButton jButton1 = new JButton();
DefaultTableModel dtm = new DefaultTableModel(0, 3);
JButton jButton2 = new JButton();
JScrollPane jScrollPane1 = new JScrollPane();
JTable jTable1 = new JTable(dtm);


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

public void actionPerformed(ActionEvent e) {
if (e.getSource().equals(jButton2)) { //清空
while (dtm.getRowCount() > 0) {
dtm.removeRow(0);
}
}
else if (e.getSource().equals(jButton1)) { //添加一行
String[] a = {
"2 ", "3 ", "4 "};
dtm.addRow(a);
}
}
}