Java 如何设置自动刷新jpanel或jtable的计时器

Java 如何设置自动刷新jpanel或jtable的计时器,java,swing,jdbc,timer,jtable,Java,Swing,Jdbc,Timer,Jtable,如何在Jframe仍然可见时每5秒自动刷新一次Jpanel或Jtable?因此,当我更新数据库时,Jtable的内容也会更新 public static void refreshPanelItemTable(){ int delay = 2000; //milliseconds ActionListener taskPerformer = new ActionListener() { public void actionPerformed(ActionEvent ev

如何在Jframe仍然可见时每5秒自动刷新一次Jpanel或Jtable?因此,当我更新数据库时,Jtable的内容也会更新

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();
}

是这样吗?

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

这样做会有点错误。您必须使用timer类并刷新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();
        }  }

错误问题:所有更新都将是自动的,前提是模型触发了相应的事件:-)如果没有,则代码中有错误,需要修复。-1如果模型符合其合同,则不需要手动更新。好的,模型,也称为数据库,没有此类合同tableModel如何才能了解数据库,除了手动更新之外,是否定期执行该更新以轮询数据库?这就是我的观点:您需要将定期更新放在某个地方,因为我假设此数据库与大多数数据库一样,不具备为更改的数据添加侦听器的功能。正确的跟踪,有一个重要错误:swing组件/属性(包括模型)必须在EDT上访问!我如何循环这个?而(JFRAME.visible==true)?@kleopatra:我对此投了更高的票,尽管错过了那个重要的部分。虽然is
Model
也需要在EDT上更新?@nIcEcOw是的,当然:视图正在侦听其模型,因此猜猜如果模型在EDT下更新会发生什么:-)在任何需要的地方调用start()方法。最好在psvm中或initcomponents()之后使用它。延迟是指刷新时间。5*1000表示5秒。因为这会增加延迟的价值。谢谢