我正在获取数据库的数据并显示在表格中。
我的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,我怎么能实现这个目标?
除此之外,我需要检查数据时间是否小于今天,然后禁用行
答案 0 :(得分:3)
我知道这是一个非常古老的问题,但我遇到了一个非常类似的问题,并决定为这个问题发布一个更好的解决方案。
首先,您应该定义一个新类: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数据类型的其他表。
希望这有帮助!
答案 1 :(得分:1)
我找到了一个解决方案,这里是
@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();
}
有更好的方法吗?