JTable setCellRenderer将文本字段格式化为日期?

时间:2013-01-25 20:24:46

标签: swing date jtable tablecellrenderer

我有一个SQLite数据库,其日期存储为VARCHAR(yyyy-mm-dd),例如'2013-01-25'。 我的查询从表中检索记录并将其显示为存储。我需要在VARCHAR中显示JTable数据为'2013年1月25日星期五'。我怀疑使用 setCellRenderer 作为包含VARCHAR的列是可行的方法。此外,我认为这将是一个两步过程:首先,将VARCHAR转换为日期值,然后根据需要格式化日期。如果我从JTable获取VARCHAR值并将其显示在JTextField中,我可以这样做:

MyDate = new SimpleDateFormat("yyyy-MM-dd").parse(rs.getString("My_Date"));

然后根据需要格式化

MyDateStr = new SimpleDateFormat("EEEE MMMM d, yyyy").format(MyDate);

这一切都很好;但是,我需要JTable列中的格式化显示。我从未使用setCellRenderer,因此我可以使用一些帮助入门。

2 个答案:

答案 0 :(得分:5)

Rob Camick关于Table Format Renderers的帖子可以解决您的问题。

<强>更新

我尝试了一个例子(因为我也很想在JTable中查看DateFormat,我目前还没有使用mKorbel代码。我作为input提供的格式为"2013-01-25"

Date Format Example

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);
}
}

答案 1 :(得分:0)

制作这样的课程......

  public class DateRenderer extends DefaultTableCellRenderer {

    public DateRenderer() { // This is a contructor
        DateFormatter formatter = new DateFormatter("yyyy-MM-dd");
    }

    public class DateFormatter extends SimpleDateFormat { //This another class within a class

        public DateFormatter(String pattern) {
            super(pattern);
        }
    }
}
  

并将其添加到您的面板&gt;&gt; jTable.setDefaultRenderer(Date.class,new DateRenderer());