Получить индексную строку даты String больше 30 дней JTable

Моя проблема в том, что у меня есть 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 столбцами, в котором четвертый является строкой, представляющей дату.

Я попытался добавить кнопку с таким прослушивателем действий, чтобы перебрать все строки JTable в столбце 4, чтобы получить все значения даты строки, чтобы сравнить ее с текущей датой, чтобы проверить, старше ли они 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 из JTable, которая имеет дату столбца 4 на 30 дней старше.


person Cohen    schedule 21.08.2016    source источник
comment
(1-), начните принимать ответы на другие вопросы (stackoverflow .com/questions/39060135/) ПЕРЕД тем, как вы начнете публиковать новые вопросы. Вы снова не опубликовали SSCCE. Кроме того, код, который вы разместили в своем последнем вопросе, даже не является кодом, который вы выполняете в своей программе, поэтому откуда мы знаем, что код, который вы разместили здесь, является кодом, который вы выполняете. Это еще одна причина, по которой SSCCE следует публиковать с каждым вопросом.   -  person camickr    schedule 22.08.2016


Ответы (1)


Добавьте экземпляры java.util.Date в свой TableModel, и верните правильный тип в вашей реализации getColumnClass(), как показано здесь. Date реализует Comparable<T>, что упрощает сравнение. Начиная с примера и добавляя 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.

изображение

person trashgod    schedule 21.08.2016