Как я могу получить первый час от JTable - PullRequest
1 голос
/ 24 ноября 2011

У меня есть Jtable, как вы видите на картинке:

enter image description here

и я хочу получить самый ранний час от него.

Я попробовал следующий код, но он не всегда получает правильное самое раннее время.

String tinjm="";

if(jTable1.getRowCount()==1){
    System.out.println(jTable1.getValueAt(0, 1).toString());
}else{
    for(int i=0; i<jTable1.getRowCount()-1;i++){
        String k=jTable1.getValueAt(i, 1).toString();
        String j=jTable1.getValueAt(i+1, 1).toString();

        if(Integer.parseInt(k.substring(0, 2))<Integer.parseInt(j.substring(0, 2))){
            tinjm=k;
        }else{
            tinjm=j;
        }
    }

    System.out.println(tinjm);
}

Спасибо за ваше сотрудничество.

Ответы [ 3 ]

2 голосов
/ 24 ноября 2011

После того, как вы выпрямите свой рендерер, как предложил mKorbel, исправьте ваш алгоритм.Вы находите минимум с чем-то в этом направлении:

min = Integer.parseInt(tab.get(0...);
for (int i = 1; i < tab.getRowCount(); i++) {
   num = Integer.parseInt(tab.get(i...)..;
   if (num < min) 
      min = num;
}

Если вы сравниваете пары, это не сработает всегда, что означает, что это неправильно.

1 голос
/ 24 ноября 2011

Другой автор предлагает лучший способ форматирования данных для использования пользовательского средства визуализации таблиц. Ваша логика сравнивает данные текущей и следующей строк, но что, если уже установленное значение более раннее, чем текущее сравнение?

Пример кода ниже:

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

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTable;



public class TestJTable {
private void init(){
    String[][] rowData = new String[][]{{"0","05:00"},{"1","08:00"},{"3","01:40"},{"4","01:30"},{"5","11:15"},{"6","12:10"}};

    String[][] columnNames = new String[][]{{},{}};
    final JTable table = new JTable(rowData, columnNames);

    JFrame frame = new JFrame();
    frame.setLayout(new BorderLayout());
    frame.add(table, BorderLayout.CENTER);

    JButton button = new JButton("Get Earliest Date");
    button.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            String[] earliest = findEarliestTime(table).split(":");
            JOptionPane.showMessageDialog(null, "Earliest Hour " + earliest[0] + " , Minute : " + earliest[1]);
        }
    });

    frame.add(button, BorderLayout.SOUTH);
    frame.pack();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
}

private String findEarliestTime(JTable table) {
    String earliest = (String)table.getValueAt(0, 1);
    try {
        SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
        Date currentDate = null;
        Date earliestDate = null;
        String currentValue = null;
        for(int iDx = 1; iDx < table.getRowCount(); iDx++){
            currentValue = (String)table.getValueAt(iDx, 1);
            currentDate = sdf.parse(currentValue);
            earliestDate = sdf.parse(earliest);
            if(earliestDate.getTime() > currentDate.getTime()){
                earliest = currentValue;
            }
        }
    } catch (NumberFormatException e) {
        e.printStackTrace();
    } catch (ParseException e) {
        e.printStackTrace();
    }
    return String.valueOf(earliest);
}
public static void main(String[] args) {
    new TestJTable().init();
}

}

1 голос
/ 24 ноября 2011

Ваша логика слегка ошибочна.Вы просматриваете свои строки, просматривая текущую строку (k) и следующую строку (j).Вы сравниваете их, и то, что раньше, становится тинджм.Однако вы не проверяете, находится ли tinjm уже раньше, чем k или j.Таким образом, ваш результат - самый ранний из последних двух строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...