获取字符串日期大于30天JTable的索引行

时间:2016-08-21 18:50:20

标签: java swing jtable defaulttablemodel

我的问题是我有一个JTable,其中包含2个数据和矢量数据。列名称分别为

Vector<String> rowOne = new Vector<>(); 
rowOne.addElement("Harry");
rowOne.addElement("100414");
rowOne.addElement("21");
rowOne.addElement("239438"); 
rowOne.addElement("08/21/2016");
rowOne.addElement("30000");

Vector<String> rowTwo = new Vector<>();
rowTwo.addElement("Gordon");
rowTwo.addElement("34353");
rowTwo.addElement("25");
rowTwo.addElement("2538"); 
rowTwo.addElement("07/ 16/2016");
rowTwo.addElement("20000");

Vector<Vector> rowData = new Vector<>();
rowData.addElement(rowOne);
rowData.addElement(rowTwo);

Vector<String> columnNames = new Vector<>();
columnNames.addElement("Name");
columnNames.addElement("Cc");
columnNames.addElement("Age");
columnNames.addElement("Phone");
columnNames.addElement("Date");
columnNames.addElement("Amount");

DefaultTableModel model = new DefaultTableModel(rowData, columnNames);
table = new JTable(model);

我们可以看到一个普通的JTable有6列,其中第四列是一个表示日期的字符串。

我尝试添加一个带有这样的动作侦听器的按钮,以便在第4列迭代JTable的所有行,以便获取所有字符串日期值,将其与当前日期进行比较,以验证它们是否&# 39;超过30天。

public void actionPerformed(ActionEvent e)
    {

else if(e.getActionCommand().equals("limPago"))
        {
            DefaultTableModel model = (DefaultTableModel)table.getModel();
            int num = model.getRowCount();

            for(int i = 0; i < num; i++)
            {
             //Right here i don't know how to identity the columns with date greater
             //than 30 days and take the jtable index corresponding to that row.
            }
    }

我需要获得与Object的{​​{1}}对应的索引行,其中第4列的日期为30天。

1 个答案:

答案 0 :(得分:2)

java.util.Date的实例添加到TableModel,并在getColumnClass()的实施中返回正确的类型,如图here所示。 Date实现了Comparable<T>,使比较变得简单。从example开始并添加每日32行,以下Action打印大于或等于 then的行,其已被初始化为30天的日期因此:

控制台:

30 Wed Sep 21 19:34:35 EDT 2016
31 Thu Sep 22 19:34:35 EDT 2016

代码:

for (int i = 1; i <= 32; i++) {…}
…
f.add(new JButton(new AbstractAction("Scan") {
    @Override
    public void actionPerformed(ActionEvent e) {
        Calendar then = Calendar.getInstance();
        then.add(Calendar.DAY_OF_YEAR, 30);
        for (int i = 0; i < model.getRowCount(); i++) {
            Date d = (Date) model.getValueAt(i, 1);
            if (d.compareTo(then.getTime()) > -1) {
                System.out.println(i + " " + d);
            }
        }
    }
}), BorderLayout.PAGE_END);

将谓词更改为d.compareTo(then.getTime()) < 1,以便在 then之前查看行

image