所以我一直在尝试使用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);
}
}
但细胞没有显示任何东西,这里有什么问题?
答案 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时有多个问题?
日历有一种方法可以返回日历的日期。所以它为你的另一个渲染器增加了一行代码。也就是说,您从日历中获取日期,然后您可以按照与其他代码相同的方式对其进行格式化。