2014-05-13 53 views
1

我正嘗試使用DefaultTableCellRenderer格式化JTable中的列。例如:如果用戶輸入:使用DefaultTableCellRenderer在JTable中指定列類

20140914 

這將是格式:

2014-09-14 

我的代碼如下:

//Setting data type for each class 
    //This is a method within the DefaultTableModel 
    public Class getColumnClass(int col) 
    { 

     if (col == 0) 
      return DateRenderer.class; 
     if (col == 1 || col == 2) 
      return String.class; 
     else 
      return Double.class; 


    } 

//This is a separate class that I have problem with: 
static class DateRenderer extends DefaultTableCellRenderer 
{ 

    //Using Decimal format to format dash 
    DecimalFormatSymbols fmtSymbols = new DecimalFormatSymbols(); 
    fmtSymbols.setDecimalSeparator('-'); 
    DecimalFormat fmt = new DecimalFormat("####.##.##"); 


    public DateRenderer() { 
     super(); } 

    public void setValue(Object value) 
    { 

     setText (fmt.format(value)); 

    } 

} 

有兩大問題的代碼。一個是我有問題,該行:

fmtSymbols.setDecimalSeparator('-'); 

另一個原因是,它會讓我的整個柱變得不可編輯(其它列仍可以編輯和保存)。

+0

數據是通過使用從實際表格中輸入的,還是來自文本字段或其他東西? –

+0

http://i.stack.imgur.com/KRVMA.png這是我的GUI界面的圖像。我想要的是:如果用戶在日期欄下輸入日期,它會自動在數字之間加上' - '(破折號)。感謝您的幫助。 – user2789240

+0

當用戶輸入格式爲「yyyyMMdd」的內容時會發生什麼?你將如何處理_that_? –

回答

2

「好了,這只是一個簡單的程序設計,在目前處理年月日,我要採取一步到位的時間和了解如何編程和格式化日期」

  • 至於格式,你不應該使用DecimalFormat。請使用DateFormat。常用的子類是SimpleDateFormat

  • 至於你目前執行的DefautTableCellRenderer,你缺少的重要組成部分,這是getTableCellRendererComponent壓倒一切的。你可以看到How to use Renders一個正確的方法。還有may questions你可以看看。至於你的覆蓋getColumnClass(),列類不是渲染器組件。您不必改爲使用列類Date,並讓Date的默認渲染器爲您執行渲染。你可以在Using Renderers看到更多。如果您不想將它設爲Date並將其保留爲String,則渲染器應該將重新渲染處理爲正確的格式。

  • 至於其他選項來處理無效輸入的進入:

    • 你可以考慮使用一個InputVerifier針對該小區的編輯組件。你可以看到一個例子heremany questions
    • 您甚至可能想要使用某種日期選擇器組件來編輯單元格。您可以看到許多相關的questions here
    • 您可能想要使用編輯器的JSpinner。見many questions
3

不要使用一個DecimalFormat呈現日期。相反,你應該使用SimpleDataFormat。有關您可以使用的渲染器,請參閱Table Format Renderers

另一個原因是,它會讓我的整個柱變得不可編輯

渲染器不控制列是否爲可編輯與否。這是isCellEditable(...)方法的工作。

此外,您的getColumnClass(...)實施是錯誤的。你不應該返回DateRender.class。相反,您應該返回列中存儲的數據類別,該數據類別應該是Date.class

+0

啊okey,感謝您的幫忙^ _ ^ – user2789240