如何在GregorianCalendar中使用CellRenderer?

时间:2010-05-06 13:15:04

标签: java swing jtable

所以我一直在尝试使用Tutorial中的示例并对其进行更改以使其适合我的程序。 getColumnValue方法返回保存应该显示的信息的对象。这是要走的路还是应该返回要显示的实际String。我想不是因为这样我会将演示文稿与我试图避免的数据混合在一起。

public class IssueTableFormat implements TableFormat<Appointment> {

    public int getColumnCount() {
        return 6;
    }

    public String getColumnName(int column) {
        if(column == 0)      return "Datum";
        else if(column == 1) return "Uhrzeit";
        else if(column == 2) return "Nummer";
        else if(column == 3) return "Name";
        else if(column == 4) return "letzte Aktion";
        else if(column == 5) return "Kommentar";

        throw new IllegalStateException();
    }

    public Object getColumnValue(Appointment issue, int column) {

        if(column == 0)      return issue.getDate();
        else if(column == 1) return issue.getDate();
        else if(column == 2) return issue.getSample();
        else if(column == 3) return issue.getSample();
        else if(column == 4) return issue.getHistory();
        else if(column == 5) return issue.getComment();

        throw new IllegalStateException();
    }
}

第0列和第1列包含一个GregorianCalendar对象,但是我想要第0​​列显示日期,1要显示时间。

所以我知道使用cellRenderers可以在这里提供帮助。

这就是我的尝试。

public class DateRenderer extends DefaultTableCellRenderer {

    public DateRenderer() { super(); }

    public void setValue(Object value) {
        GregorianCalendar g =(GregorianCalendar) value;
        value=g.get(GregorianCalendar.HOUR);
    }
}

但细胞没有显示任何东西,这里有什么问题?

3 个答案:

答案 0 :(得分:1)

对我来说,你看起来很尴尬

if(column == 0)      return issue.getDate();
else if(column == 1) return issue.getDate();

但希望他们展示不同的东西。我会更改模型,以便它对这两个不同的单元格有两个不同的变量,或者它最少从getColumnValue返回不同的值。

答案 1 :(得分:1)

您的渲染器的setValue()方法实际上并没有执行任何具有计算值的内容。我想你想要这个:

public void setValue(Object value) {
   GregorianCalendar g =(GregorianCalendar) value;
   super.setValue(g.get(GregorianCalendar.HOUR));
}

答案 2 :(得分:1)

我已经为您提供了有关如何使用自定义渲染器渲染Date对象的工作代码,那么为什么在Date工作正常时使用Calendar时有多个问题?

日历有一种方法可以返回日历的日期。所以它为你的另一个渲染器增加了一行代码。也就是说,您从日历中获取日期,然后您可以按照与其他代码相同的方式对其进行格式化。