如何为autorefresh jpanel或jtable设置计时器

时间:2013-07-30 10:00:44

标签: java swing jdbc timer jtable

如何在Jframe仍然可见的情况下每隔5秒自动刷新Jpanel或Jtable?所以当我更新数据库时,Table的内容也会更新

public static void refreshPanelItemTable(){
 int delay = 2000; //milliseconds
    ActionListener taskPerformer = new ActionListener() {
         public void actionPerformed(ActionEvent evt) {
             MainFramePanels.itemTable.revalidate();
         }
    };
     new Timer(delay, taskPerformer).start();
}

这是对的吗?

2 个答案:

答案 0 :(得分:1)

使用挥杆计时器。在计时器的动作侦听器中,检查数据库是否已更改。如果有,则启动一个新线程将数据库加载到表中。

答案 1 :(得分:-1)

你要这样做的方式有点不对劲。您必须使用计时器类并刷新您的SQL查询。您不需要刷新jpanel。试试看......

long delay = 15 * 1000;
LoopTask task = new LoopTask();
Timer timer = new Timer("TaskName"); 

public void start() {
    timer.cancel();
    timer = new Timer("TaskName");
    Date executionDate = new Date();
    timer.scheduleAtFixedRate(task, executionDate, delay);
}  

private class LoopTask extends TimerTask {

    public void run() {
        refreshSQL();
    }
}
DefaultTableModel dtm=null;  
Vector v=null;
public void refreshSQL() {
 try {
  dtm = (DefaultTableModel) jTable1.getModel();
            ResultSet r = DB.dbConfig.search("your sql statement");
            while (r.next()) {
                v = new Vector();
                v.add(r.getString("aa"));
                dtm.addRow(v);

            }



        } catch (Exception e) {
            e.printStackTrace();
        }  }