我的问题是我有一个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天。
答案 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
之前查看行。