JTable单元格渲染
问题描述:
我正在获取数据并显示在表中。JTable单元格渲染
我的getColumnClass是
@Override
public Class<? extends Object> getColumnClass(int column) {
return getValueAt(0, column).getClass();
}
当我打印的价值,我得到的类名作为java.sql.Timestamp中,但是当它显示我有一个问题,它只是显示DD/MM/yyyy,但我需要它显示dd/MM/yyyy HH:mm,我该如何实现这一目标?
除了做这个,我需要检查,如果DATATIME是比今天较少然后禁用行
答
我找到了解决办法,在这里它是
@Override
public Class<? extends Object> getColumnClass(int column) {
String value = getValueAt(0, column).getClass().toString();
if (value.equalsIgnoreCase("class java.sql.Timestamp")) {
return JTextField.class;
}
return getValueAt(0, column).getClass();
}
有没有更好的办法做它?
答
我知道这是一个非常古老的问题,但我有一个非常类似的问题,并决定发布一个更好的解决方案的问题。
首先,你应该定义一个新类:TimestampCellRenderer.java
package gui;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import javax.swing.table.DefaultTableCellRenderer;
public class TimestampCellRenderer extends DefaultTableCellRenderer {
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
public TimestampCellRenderer() {
super();
}
public void setValue(Object value) {
if (formatter == null) {
formatter = DateFormat.getDateInstance();
}
setText((value == null) ? "" : formatter.format(value));
}
}
,然后在GUI类,这个定义添加到您的类:
yourTable.getColumnModel().getColumn(1).setCellRenderer(new TimestampCellRenderer());
在这种情况下,我决定以格式化第一列,但在表格模型中定义常量将是一种非常好的做法。
这最好的部分是,您可以重复使用您的代码与使用Timestamp数据类型的其他表。
希望这会有所帮助!
对不起,如果我明白你的问题不对,但你应该阅读http://download.oracle.com/javase/tutorial/uiswing/components/table.html - 你可以为你的表格单元设置自定义的渲染器(用于显示另一种日期格式)和自定义编辑器(如果你的行不是“禁用”)。 – nokul 2010-12-17 11:57:21