Java Swing:如何添加CellRenderer来显示日期?

时间:2010-05-05 23:48:14

标签: java swing jtable

我有一张表:

public class AppointmentTableModel extends AbstractTableModel {
    private int columns;
    private int rows;
    ArrayList<Appointment> appointments;...

因此,表格的每一行都包含一个约会。

public class Appointment {

    private Date date;
    private Sample sample;
    private String comment;
    private ArrayList<Action> history;

    public Appointment(Date date, Sample sample, String comment) {
        this.date = date;
        this.sample = sample;
        this.comment = comment;
        this.history = new ArrayList<Action>();
    }

    public Object getByColumn(int columnIndex) {
        switch (columnIndex) {
        case 0: return date;//Date: dd:mm:yyyy

        case 1: return date;//Time mm:hh

        case 2: return sample;//sample.getID() int (sampleID)

        case 3: return sample;//sample.getNumber string (telephone number)

        case 4: return sample;//sample.getName string (name of the person)

        case 5: return history;//newst element in history as a string

        case 6: return comment;//comment as string


        }
        return null;

我在评论中添加了这个意思。我如何创建CellRenderers来显示它。

   table.getColumnModel().getColumn(1).setCellRenderer(new DateRenderer());

我还希望在日期晚于当前日期时添加要用红色绘制的整行。 然后是另一个包含JButton的列,用相应的约会作为参数打开另一个屏幕。

1 个答案:

答案 0 :(得分:0)

请参阅Table Format Renderers了解日期。

请参阅Table Row Rendering,根据单元格的值突出显示一行。

编辑:

这就是我在博客条目中为表创建数据的方式:

String[] columnNames = {"Date/Time", "Time", "Percent", "Currency"};
Object[][] data =
{
    {new Date(108, 0, 10), new Date(), new Double(.10), new Double(00075.25) },
    {new Date(108, 1, 15), new Date(), new Double(.50), new Double(01275.75) },
    {new Date(108, 2, 20), new Date(), new Double(.99), new Double(-4275.00) }
};

从博客图片中可以看出,当您在模型中存储Date对象时,它会使用指定的日期或时间正确格式化。

忘掉你真正的程序,用上面的数据创建一个SSCCE,并向自己证明这个概念是有效的。然后弄清楚你的真实代码出了什么问题。