Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 自动更新JTable_Java_Swing_Timer_Jtable - Fatal编程技术网

Java 自动更新JTable

Java 自动更新JTable,java,swing,timer,jtable,Java,Swing,Timer,Jtable,JTable如何根据时间自动更新?因此,每次当前时间更改时,表都会自动更新。一些人能否提供一段代码,说明这在Java中是如何工作的?要在时间更改后更新表,请执行以下操作。请提前告诉我并谢谢你 package times; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.text.DateFormat; import java.text.ParseExce

JTable如何根据时间自动更新?因此,每次当前时间更改时,表都会自动更新。一些人能否提供一段代码,说明这在Java中是如何工作的?要在时间更改后更新表,请执行以下操作。请提前告诉我并谢谢你

          package times;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.Timer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;

public class TableTimeChange {

DefaultTableModel model2 = new DefaultTableModel();

String rowdata[] = new String[8];
Date[] date123 = new Date[8];

private SimpleDateFormat format = new SimpleDateFormat("HH:mm:dd:ss");
private JTable table = new JTable(getTableModel());

public TableTimeChange() {
    table.setPreferredScrollableViewportSize(table.getPreferredSize());
    JFrame frame = new JFrame();
    frame.add(new JScrollPane(table));
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.pack();

    Timer timer = new Timer(1000, new TimerListener());
    timer.start();
    frame.setVisible(true);
}

private TableModel getTableModel() {
    String[] cols = {"Time"};


    String array1[] = { "12-12-2001 10:18:30 PM", "12-15-2001 10:18:54 PM"};
    String array2[] = {"01-19-1989 01:18:27 AM", "01-19-2019 01:28:36 PM"};
    String array3[] = {"12-05-1989 05:18:57 PM", "08-25-1989 09:18:27 PM"};
    String array4[] = { "10-15-1985 09:18:17 AM", "10-25-1985 06:48:27 AM"};
    String array5[] = {"06-10-2001 03:09:19 AM", "05-16-2011 03:29:10 AM"};
    String array6[] = {"01-12-2000 09:00:08 PM", "11-22-2010 07:00:56 PM"};
    String array7[] = { "07-19-1969 12:18:47 PM", "02-05-1969 01:18:17 AM"};
    String array8[] = {"01-09-2010 10:09:50 AM", "12-09-2010 05:09:10 PM"};


    rowdata[0] = array1[0];
    rowdata[1] = array2[0];
    rowdata[2] = array3[0];
    rowdata[3] = array4[0];
    rowdata[4] = array5[0];
    rowdata[5] = array6[0];
    rowdata[6] = array7[0];
    rowdata[7] = array8[0];


    for(int t = 0; t<rowdata.length; t++)
    {

        DateFormat sdf = new SimpleDateFormat("MM-dd-yyyy hh:mm:ss a");
        DateFormat sdf3 = new SimpleDateFormat("MM-dd-yyyy hh:mm:ss a");


        try {

            date123[t] = sdf.parse(rowdata[t]);


        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

    for(int i = 0; i<8; i++)
    {



    String[][] data = {{getFormatDate(date123[i])},{ getFormatDate(date123[i])}};
    DefaultTableModel model = new DefaultTableModel(data, cols);

   model2 = model;


    }


    return model2;
}

private String getFormatDate(Date date) {
    return format.format(date);
}

private class TimerListener implements ActionListener {

    @Override
    public void actionPerformed(ActionEvent e) {
        DefaultTableModel model = (DefaultTableModel)table.getModel();
        for (int i = model.getRowCount() -1; i >= 0; i--) {
            model.setValueAt(getFormatDate(date123[i]), i, 0);
        }   
    }
}

public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            new TableTimeChange();
        }
    });
}
}
包装时间;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.text.DateFormat;
导入java.text.ParseException;
导入java.text.simpleDataFormat;
导入java.util.Date;
导入javax.swing.JFrame;
导入javax.swing.JScrollPane;
导入javax.swing.JTable;
导入javax.swing.SwingUtilities;
导入javax.swing.Timer;
导入javax.swing.table.DefaultTableModel;
导入javax.swing.table.TableModel;
公共类TableTimeChange{
DefaultTableModel2=新的DefaultTableModel();
字符串rowdata[]=新字符串[8];
日期[]日期123=新日期[8];
私有SimpleDataFormat格式=新SimpleDataFormat(“HH:mm:dd:ss”);
私有JTable表=新JTable(getTableModel());
公共表时间更改(){
table.setPreferredScrollableViewportSize(table.getPreferredSize());
JFrame=新JFrame();
frame.add(新的JScrollPane(表));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
Timer Timer=新定时器(1000,new TimerListener());
timer.start();
frame.setVisible(true);
}
私有TableModel getTableModel(){
字符串[]cols={“Time”};
字符串数组1[]={“12-12-2001 10:18:30 PM”,“12-15-2001 10:18:54 PM”};
字符串数组2[]={“01-19-1989 01:18:27 AM”,“01-19-2019 01:28:36 PM”};
字符串数组3[]={“12-05-1989 05:18:57 PM”,“08-25-1989 09:18:27 PM”};
字符串数组4[]={“10-15-1985 09:18:17 AM”,“10-25-1985 06:48:27 AM”};
字符串数组5[]={“06-10-2001 03:09:19 AM”,“05-16-2011 03:29:10 AM”};
字符串数组6[]={“01-12-2000 09:00:08 PM”,“11-22-2010 07:00:56 PM”};
字符串数组7[]={“07-19-1969 12:18:47 PM”,“02-05-1969 01:18:17 AM”};
字符串数组8[]={“01-09-2010 10:09:50 AM”,“12-09-2010 05:09:10 PM”};
rowdata[0]=array1[0];
rowdata[1]=array2[0];
rowdata[2]=array3[0];
rowdata[3]=数组4[0];
rowdata[4]=数组5[0];
rowdata[5]=数组6[0];
rowdata[6]=array7[0];
rowdata[7]=数组8[0];
对于(int t=0;t您可以使用

你可以用

你可以用

你可以用


就像我在评论中提到的那样,只需使用一个Swing计时器。您需要为
计时器
提供一个
ActionListener
,其中
actionPerformed
将每隔这么多毫秒调用一次(无论您作为构造函数中的第一个参数提供什么)。在那里,您将使用新的
日期
或格式化日期更新表格模型(正如我在下面的示例中所做的),并根据该日期更改表格中的任何数据

更多信息请访问

免责声明:我实在受不了了。我为什么要在格式中使用
dd
?那不应该存在。它应该是“HH:mm:ss”。我太懒了,不想更改它。


就像我在评论中提到的那样,只需使用一个Swing计时器。您需要为
计时器
提供一个
ActionListener
,其中
actionPerformed
将每隔这么多毫秒调用一次(无论您作为构造函数中的第一个参数提供什么)。在那里,您将使用新的
日期
或格式化日期更新表格模型(正如我在下面的示例中所做的),并根据该日期更改表格中的任何数据

更多信息请访问

免责声明:我实在受不了了。我为什么要在格式中使用
dd
?那不应该存在。它应该是“HH:mm:ss”。我太懒了,不想更改它。


就像我在评论中提到的那样,只需使用一个Swing计时器。您需要为
计时器
提供一个
ActionListener
,其中
actionPerformed
将每隔这么多毫秒调用一次(无论您作为构造函数中的第一个参数提供什么)。在那里,您将使用新的
日期
或格式化日期更新表格模型(正如我在下面的示例中所做的),并根据该日期更改表格中的任何数据

更多信息请访问

免责声明:我实在受不了了。我为什么要在格式中使用
dd
?那不应该存在。它应该是“HH:mm:ss”。我太懒了,不想更改它。


就像我在评论中提到的那样,只需使用一个Swing计时器。您需要为
计时器
提供一个
ActionListener
,其中
actionPerformed
将每隔这么多毫秒调用一次(无论您作为构造函数中的第一个参数提供什么)。在那里,您将使用新的
日期
或格式化日期更新表格模型(正如我在下面的示例中所做的),并根据该日期更改表格中的任何数据

更多信息请访问

免责声明:我实在受不了了。我为什么要在格式中使用
dd
?那不应该存在。它应该是“HH:mm:ss”。我太懒了,不想更改它。


你的意思是喜欢吗?非常相似。因此,当我启动GUI时,表应该随着时间的推移而更新…@peeskillet。这就是代码所做的吗?是的,它每隔这么多毫秒添加一个新行。对重复的事件使用Swing计时器。有关更多详细信息,请参阅。我不想添加新行。我只想在时间变了。@peeskillet您能提供一个代码片段吗?您到底想更新什么?不清楚。我了解表,但您对表模型/视图的更改是什么,您需要在某个时间更新,而不是立即更新?您的意思是像吗?非常类似。因此,当我启动GUI时,表应该按照tim更新e向前移动…@peeskillet。这就是代码所做的吗?是的,它每隔这么多毫秒添加一行。对重复事件使用Swing计时器。有关更多详细信息,请参阅
import java.util.Timer;
...
Timer timer = new Timer();
timer.schedule(new TimerTask() 
{
  @Override
  public void run()
  {
    // Your code here
  }
}, time);
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.Timer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;

public class TableTimeChange {

    private SimpleDateFormat format = new SimpleDateFormat("HH:mm:dd:ss");
    private JTable table = new JTable(getTableModel());

    public TableTimeChange() {
        table.setPreferredScrollableViewportSize(table.getPreferredSize());
        JFrame frame = new JFrame();
        frame.add(new JScrollPane(table));
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();

        Timer timer = new Timer(1000, new TimerListener());
        timer.start();
        frame.setVisible(true);
    }

    private TableModel getTableModel() {
        String[] cols = {"Time", "Is Seconds Even"};
        Object[][] data = { { getNewRow() }, { getNewRow() } };
        DefaultTableModel model = new DefaultTableModel(data, cols);
        return model;
    }

    private String getFormatDate(Date date) {
        return format.format(date);
    }

    private Object[] getNewRow() {
        Calendar cal = Calendar.getInstance();
        int seconds = cal.get(Calendar.SECOND);
        boolean isSecondsEven = (seconds % 2 == 0);
        return new Object[] { getFormatDate(cal.getTime()), isSecondsEven };
    }

    private class TimerListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            DefaultTableModel model = (DefaultTableModel)table.getModel();
            for (int i = model.getRowCount() -1; i >= 0; i--) {
                Object[] row = getNewRow();
                model.setValueAt(row[0], i, 0);
                model.setValueAt(row[1], i, 1);
            }   
        }
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new TableTimeChange();
            }
        });
    }
}