Pau*_*aul 3 swing date jtable tablecellrenderer
例如,我有一个日期存储为VARCHAR(yyyy-mm-dd)的SQLite数据库'2013-01-25'.我的查询从表中检索记录并将其显示为存储.我需要VARCHAR在JTable"2013年1月25日星期五"中显示数据.我怀疑使用setCellRenderer作为包含VARCHAR的列是可行的方法.此外,我认为这将是一个两步过程:首先,将VARCHAR转换为日期值,然后根据需要格式化日期.如果我从中获取VARCHAR值JTable并在以下位置显示它,我可以这样做JTextField:
MyDate = new SimpleDateFormat("yyyy-MM-dd").parse(rs.getString("My_Date"));
Run Code Online (Sandbox Code Playgroud)
然后根据需要格式化它
MyDateStr = new SimpleDateFormat("EEEE MMMM d, yyyy").format(MyDate);
Run Code Online (Sandbox Code Playgroud)
这一切都很好,也很好; 但是,我需要JTable列中的格式化显示.我从未使用过setCellRenderer,所以我可以使用一些帮助入门.
发表Rob Camick有关表格格式渲染器可以解决你的问题.
更新:
我尝试了一个例子(因为我也很好奇地看看DateFormat我迄今为止没有做过的JTable)使用mKorbel代码.我所给出的格式input是"2013-01-25".

import java.awt.Dimension;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
public class JTableDateFormat {
public static void main(String[] args) {
Object[][] data = {
{"Amar", "2013-01-25"},
{"Sammy", "2013-01-25"}
};
Object[] columnNames = {"Name", "Date"};
JTable table = new JTable(data, columnNames);
table.getColumnModel().getColumn(1).setCellRenderer(new DateRenderer());
JFrame frame = new JFrame();
frame.add(new JScrollPane(table));
frame.setSize(new Dimension(400, 100));
frame.setVisible(true);
}
}
class DateRenderer extends DefaultTableCellRenderer {
private static final long serialVersionUID = 1L;
private Date dateValue;
private SimpleDateFormat sdfNewValue = new SimpleDateFormat("EE MMM dd hh:mm:ss z yyyy");
private String valueToString = "";
@Override
public void setValue(Object value) {
if ((value != null)) {
String stringFormat = value.toString();
try {
dateValue = new SimpleDateFormat("yyyy-mm-dd", Locale.ENGLISH).parse(stringFormat);
} catch (ParseException e) {
e.printStackTrace();
}
valueToString = sdfNewValue.format(dateValue);
value = valueToString;
}
super.setValue(value);
}
}
Run Code Online (Sandbox Code Playgroud)