如何从JTable获得第一个小时

时间:2011-11-24 16:34:14

标签: java swing date jtable

我在图片上看到了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 个答案:

答案 0 :(得分:2)

在你像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 :(得分:1)

你的逻辑略有缺陷。您循环遍历行,查看当前行(k)和下一行(j)。你比较这些以及哪一个早先变成了tinjm。但是,您不检查tinjm是否早于k或j。所以你的结果只是最后两行中最早的。

答案 2 :(得分:1)

其他海报建议使用自定义表格渲染器更好的格式化数据的方法,您的逻辑是比较当前行和下一行数据,但如果已设置的值早于当前比较,该怎么办?

以下示例代码:

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();
}

}