Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从JTable获取第一个小时_Java_Swing_Date_Jtable - Fatal编程技术网

Java 如何从JTable获取第一个小时

Java 如何从JTable获取第一个小时,java,swing,date,jtable,Java,Swing,Date,Jtable,我有一个Jtable,如图所示: 我想知道最早的时间 我尝试了下面的代码,但它并不总是得到正确的最早时间 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.get

我有一个Jtable,如图所示:

我想知道最早的时间

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

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);
}
String tinjm=”“;
if(jTable1.getRowCount()==1){
System.out.println(jTable1.getValueAt(0,1.toString());
}否则{

对于(int i=0;i您的逻辑有点缺陷。您正在各行之间循环,查看当前行(k)和下一行(j)。您比较这些数据,哪个较早成为tinjm。但是,您不检查tinjm是否早于k或j。因此,您的结果只是最后两行中最早的一行。

您的逻辑有点缺陷。您正在各行之间循环,查看当前行(k)和下一行(j)。您比较这些数据,哪个较早成为tinjm。但是,您不检查tinjm是否早于k或j。因此,您的结果仅为最后两行中最早的一行。

其他海报建议使用自定义表呈现器设置数据格式的更好方法,您的逻辑是在当前和n之间进行比较ext行数据,但如果已设置的值早于当前比较,该怎么办

示例代码如下:

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();
    }
  }
导入java.awt.BorderLayout;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.text.ParseException;
导入java.text.simpleDataFormat;
导入java.util.Date;
导入javax.swing.JButton;
导入javax.swing.JFrame;
导入javax.swing.JOptionPane;
导入javax.swing.JTable;
公共类测试表{
私有void init(){
字符串[][]rowData=新字符串[][{{“0”、“05:00”}、{“1”、“08:00”}、{“3”、“01:40”}、{“4”、“01:30”}、{“5”、“11:15”}、{“6”、“12:10”};
字符串[][]columnNames=新字符串[][]{{},{};
最终JTable表=新JTable(行数据、列名称);
JFrame=新JFrame();
frame.setLayout(新的BorderLayout());
添加(表格、边框布局、中心);
JButton按钮=新JButton(“获取最早日期”);
addActionListener(新建ActionListener()){
@凌驾
已执行的公共无效操作(操作事件e){
字符串[]最早=FinDeariestTime(表)。拆分(“:”);
showMessageDialog(null,“最早的小时”+最早的[0]+”,分钟:“+最早的[1]);
}
});
框架。添加(按钮,边框布局。南);
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
私有字符串findearestime(JTable表){
字符串最早=(字符串)table.getValueAt(0,1);
试一试{
SimpleDataFormat sdf=新的SimpleDataFormat(“HH:mm”);
Date currentDate=null;
Date earliestDate=null;
字符串currentValue=null;
for(int iDx=1;iDxcurrentDate.getTime()){
最早=当前值;
}
}
}捕获(数字格式){
e、 printStackTrace();
}捕获(解析异常){
e、 printStackTrace();
}
返回字符串.valueOf(最早);
}
公共静态void main(字符串[]args){
新的TestJTable().init();
}
}

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

示例代码如下:

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();
    }
  }
导入java.awt.BorderLayout;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.text.ParseException;
导入java.text.simpleDataFormat;
导入java.util.Date;
导入javax.swing.JButton;
导入javax.swing.JFrame;
导入javax.swing.JOptionPane;
导入javax.swing.JTable;
公共类测试表{
私有void init(){
字符串[][]rowData=新字符串[][{{“0”、“05:00”}、{“1”、“08:00”}、{“3”、“01:40”}、{“4”、“01:30”}、{“5”、“11:15”}、{“6”、“12:10”};
字符串[][]columnNames=新字符串[][]{{},{};
最终JTable表=新JTable(行数据、列名称);
JFrame=新JFrame();
frame.setLayout(新的BorderLayout());
添加(表格、边框布局、中心);
JButton按钮=新JButton(“获取最早日期”);
addActionListener(新建ActionListener()){
@凌驾
已执行的公共无效操作(操作事件e){
字符串[]最早=FinDeariestTime(表)。拆分(“:”);
showMessageDialog(null,“最早的小时”+最早的[0]+”,分钟:“+最早的[1]);
}
});
框架。添加(按钮,边框布局。南);
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
私有字符串findearestime(JTable表){
字符串最早=(字符串)table.getValueAt(0,1);
试一试{
SimpleDataFormat sdf=新的SimpleDataFormat(“HH:mm”);
Date currentDate=null;
Date earliestDate=null;
字符串currentValue=null;
for(int iDx=1;iDxcurrentDate.getTime()){
最早=当前值;
}
}
}捕获(数字格式){
E