Java 如何从JTable获取第一个小时
我有一个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
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