总是不显示更新 应该怎么修改一下 我想定时更新数据 但现在测试用按钮都无法更新 不知道是不是getValueAt方法不对 高手帮忙看下 代码如下
//链接数据取得数据
import java.sql.*;
import java.util.ArrayList;
import java.util.Vector;
public class sqlTest {
Connection conn; 
Statement stmt; 
ResultSet res;
Vector vi=new Vector();
ArrayList sy=new ArrayList();
public Vector mai(){
Connection conn; 
Statement stmt; 
ResultSet res;
try{
Class.forName("com.mysql.jdbc.Driver").newInstance(); 
//建立到MySQL的连接 
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/center", 
"root", "123456"); 
stmt=conn.createStatement();
System.out.print("链接成功");
res=stmt.executeQuery("select * from info_test");

System.out.print("开始执行");
ResultSetMetaData rsm = res.getMetaData();

int count=rsm .getColumnCount();
while(res.next()){
//System.out.print(res.getRow());
//for(int i=0;i<count;i++){
String name=res.getString("name");
String ip=res.getString("id");
//while(res.next()){
//System.out.print(res.getString("doller"));
//}

//vi1.clear();
//}
//System.out.print(vi.size());
this.addrow(name, ip);
}

//System.out.print(sy.size());
System.out.print(vi.size());
return vi;

}catch(Exception e){
System.out.print("数据库错误");
return null;
}
}
public void addrow(String name,String id){

Vector vi1=new Vector();
vi1.clear();
vi1.add(name);
vi1.add(id);
vi.add(vi1);
}

}//jtable数据模型
import java.text.NumberFormat;
import java.util.Vector;import javax.swing.*;
import javax.swing.table.AbstractTableModel;public class testMobel extends AbstractTableModel { //@Override
Vector v=new Vector();
Vector vs=new Vector();
sqlTest sql=new sqlTest();
String[] hsa={"name","ip"};
public testMobel(){ v=sql.mai();
}
public int getColumnCount() {
// TODO Auto-generated method stub
return hsa.length;
}
public String getColumnName(int c) {
// TODO Auto-generated method stub
return hsa[c].toString();
} @Override
public int getRowCount() {
// TODO Auto-generated method stub
return v.size();

} @Override
public Object getValueAt(int row, int coml) {
// TODO Auto-generated method stub




return ((Vector)   v.get(row)).get(coml);


}}//主程序窗体
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.GroupLayout;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.LayoutStyle;
public class tableTestFream extends JFrame { private JTable table;
/**
 * Launch the application
 * @param args
 */
public static void main(String args[]) {
try {
tableTestFream frame = new tableTestFream();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
} /**
 * Create the frame
 */
public tableTestFream() {
super();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
sqlTest sql=new sqlTest();
JScrollPane scrollPane;
scrollPane = new JScrollPane();
testMobel date=new testMobel();
JButton button;
button = new JButton();
button.addActionListener(new ActionListener() {
public void actionPerformed(final ActionEvent arg0) {
table.validate();
   table.updateUI();
}
});
table = new JTable(date);
scrollPane.setViewportView(table);
button.setText("New JButton");
final GroupLayout groupLayout = new GroupLayout((JComponent) getContentPane());
groupLayout.setHorizontalGroup(
groupLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(groupLayout.createSequentialGroup()
.addGroup(groupLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(groupLayout.createSequentialGroup()
.addGap(32, 32, 32)
.addComponent(scrollPane, GroupLayout.PREFERRED_SIZE, 437, GroupLayout.PREFERRED_SIZE))
.addGroup(groupLayout.createSequentialGroup()
.addGap(195, 195, 195)
.addComponent(button)))
.addContainerGap(32, Short.MAX_VALUE))
);
groupLayout.setVerticalGroup(
groupLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(groupLayout.createSequentialGroup()
.addContainerGap()
.addComponent(scrollPane, GroupLayout.PREFERRED_SIZE, 364, GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(button)
.addContainerGap(32, Short.MAX_VALUE))
);
getContentPane().setLayout(groupLayout);
pack();
//
}}

解决方案 »

  1.   

    ((DefaultTableModel)table.getModel()).setDataVector(rowdata,coml);
    这个也不行,高手帮帮忙。
      

  2.   

    把这两行:
    table.validate(); 
      table.updateUI(); 

    换为:
    table.setModel(new testMobel());
    试试。
      

  3.   

    //改过之后的,自动更新没有反应,是不是我引用的对象不对。那应该怎么写。
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import java.util.Vector;import javax.swing.AbstractAction;
    import javax.swing.Action;
    import javax.swing.GroupLayout;
    import javax.swing.JButton;
    import javax.swing.JComponent;
    import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.LayoutStyle;
    import javax.swing.table.DefaultTableModel;
    import javax.swing.Timer;
    public class tableTestFream extends JFrame { public   JTable table;
    private Timer timer = null;
    String[] hsa={"name","ip"};
    Vector srcdata=new Vector();
    sqlTest sql=new sqlTest();
    /**
     * Launch the application
     * @param args
     */
    public static void main(String args[]) {
    try {
    tableTestFream frame = new tableTestFream();
    frame.setVisible(true);
    } catch (Exception e) {
    e.printStackTrace();
    }
    } /**
     * Create the frame
     */
    public tableTestFream() {
    super();
    final Vector cname=new Vector(2);
    timer = new Timer(300,updateTableAction);
    timer.start();
        cname.add(hsa[0]);
        cname.add(hsa[1]);
          final JTable table=new JTable();
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    addWindowListener(new WindowAdapter(){
       public void windowClosing(WindowEvent e){
        System.exit(0);
       }
      });
    JScrollPane scrollPane;
    scrollPane = new JScrollPane();
    //testMobel date=new testMobel(sql.mai());
    //srcdata=sql.mai();
    //DefaultTableModel model=new DefaultTableModel(srcdata,cname);
    //table.setModel(model);
    //table = new JTable(date);
    table.setModel(new testMobel(sql.mai()));
    JButton button;
    button = new JButton();
    button.addActionListener(new ActionListener() {
    public void actionPerformed(final ActionEvent arg0) {


    table.setModel(new testMobel(sql.mai()));
       //((DefaultTableModel)table.getModel()).setDataVector(srcdata,cname);

    }
    });
    //((DefaultTableModel)table.getModel()).setDataVector(srcdata,cname);
     
    scrollPane.setViewportView(table);
    button.setText("New JButton");
    final GroupLayout groupLayout = new GroupLayout((JComponent) getContentPane());
    groupLayout.setHorizontalGroup(
    groupLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
    .addGroup(groupLayout.createSequentialGroup()
    .addGroup(groupLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
    .addGroup(groupLayout.createSequentialGroup()
    .addGap(32, 32, 32)
    .addComponent(scrollPane, GroupLayout.PREFERRED_SIZE, 437, GroupLayout.PREFERRED_SIZE))
    .addGroup(groupLayout.createSequentialGroup()
    .addGap(195, 195, 195)
    .addComponent(button)))
    .addContainerGap(32, Short.MAX_VALUE))
    );
    groupLayout.setVerticalGroup(
    groupLayout.createParallelGroup(GroupLayout.Alignment.LEADING)
    .addGroup(groupLayout.createSequentialGroup()
    .addContainerGap()
    .addComponent(scrollPane, GroupLayout.PREFERRED_SIZE, 364, GroupLayout.PREFERRED_SIZE)
    .addGap(18, 18, 18)
    .addComponent(button)
    .addContainerGap(32, Short.MAX_VALUE))
    );
    getContentPane().setLayout(groupLayout);
    pack();
    //
    }
    private Action updateTableAction = new AbstractAction(){ public void actionPerformed(ActionEvent e){
      table.setModel(new testMobel(sql.mai()));//这句有问题
      
      }
     };

    }
      

  4.   

    错误信息成功开始执行4Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at tableTestFream$1.actionPerformed(tableTestFream.java:114)
    at javax.swing.Timer.fireActionPerformed(Unknown Source)
    at javax.swing.Timer$DoPostEvent.run(Unknown Source)
    at java.awt.event.InvocationEvent.dispatch(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)
      

  5.   

    你要把每次查询数据库的代码与连接数据库的代码分开来,与数据库建立连接后就把connection保存起来,不要每次查询都去调用它即可。
      

  6.   

    连接的事情我已经解决了,帮忙看下自动更新的问题吧,定时执行没有反应。应该是那个table对象引用的问题,不知道该怎么做。
      

  7.   

    我定义的是全局的table,在外面调用应该也是一样的,为什么不成那。