【问题标题】:How can I get the first Hour from a JTable如何从 JTable 中获取第一个小时
【发布时间】:2011-11-24 16:34:14
【问题描述】:

如图所示,我有一个 Jtable:

我想从中得到最早的 Hour。

我尝试了以下代码,但它并不总是得到正确的最早时间。

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

感谢您的合作。

【问题讨论】:

  • 当我按下“计算器”按钮时会触发此代码

标签: java swing date jtable


【解决方案1】:

按照 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;
}

如果你比较配对,它不会“总是有效”,这意味着它是错误的。

【讨论】:

    【解决方案2】:

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

    示例代码如下:

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

    【讨论】:

      【解决方案3】:

      你的逻辑有点缺陷。您正在遍历行,查看当前行 (k) 和下一行 (j)。你比较这些,哪个更早成为tinjm。但是,您不会检查 tinjm 是否已经早于 k 或 j。所以你的结果只是你最后两行中最早的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-12-19
        • 2014-04-01
        • 2012-08-02
        • 1970-01-01
        • 2021-11-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多