2010-05-06 79 views
0

所以我一直在試圖從教程中使用的例子,並改變它,所以它適合我的節目。 的getColumnValue方法返回認爲是應該顯示的信息的對象。這是要走還是應該返回實際的字符串顯示。我想不是因爲那樣我纔會將演示文稿與我試圖避免的數據混合在一起。如何使用CellRenderer for GregorianCalendar?

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

但單元格不顯示任何東西,這裏有什麼問題?

回答

1

對我來說,它看起來非常彆扭,你有

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

,但希望他們能顯示不同的東西。我會改變模型,使它對於這兩個不同的單元有兩個不同的變量,或者它至少返回getColumnValue的不同值。

+0

好吧,但是當我有方法來返回應該顯示的實際值時,我被告知不要混合數據和表示。 – HansDampf 2010-05-06 13:21:05

1

您的渲染器的setValue()方法並不實際上任何與它計算的值。我想你想要這樣的:

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

我已經給了你如何渲染使用自定義渲染Date對象工作的代碼,那麼爲什麼你對使用日曆時,日期只是罰款倍數的問題?

日曆必須返回日曆的日期的方法。所以它的一行額外的代碼給你的其他渲染器。那就是您從日曆中獲取日期,然後您可以使用與其他代碼相同的方式對其進行格式化。