2016-05-13 32 views
0

我想呈現JTable組件的單元格以支持換行,所以我在單元格內使用了JTextarea,因爲文本區域允許換行。這是我的代碼:擺動表格單元格中的文本

//Render column with header Person 
table.getColumn("Person").setCellRenderer(new RenderRedGreen()); 


final class RenderRedGreen extends DefaultTableCellRenderer { 

    JTextArea textarea; 

     @Override public Component getTableCellRendererComponent(
     JTable aTable, Object aNumberValue, boolean aIsSelected, 
     boolean aHasFocus, int aRow, int aColumn) 
     { 
     String value = (String)aNumberValue; 

     textarea = new JTextArea(); 
     aTable.add(textarea); 
     textarea.setLineWrap(true); 
     textarea.setWrapStyleWord(true); 

      textarea.setText(value); 
     aTable.setRowHeight(90); 

     if (aNumberValue == null) return this; 

     Component renderer = super.getTableCellRendererComponent(
       aTable, aNumberValue, aIsSelected, aHasFocus, aRow, aColumn 
     ); 


     if (value.equals("Me")) 
      renderer.setForeground(Color.red); 
     else 
      renderer.setForeground(Color.black); 

     return this; 
     } 
} 

問題是文本沒有被包裹,所以我看不到完整的長文本。我究竟做錯了什麼?

+0

一般來說,包裝文字並不難,你可以只換行文本''標籤和它會包裝,問題將會使該行足夠大以適應文本(順便說一句,不要在渲染器中設置行高度,這不是工作)。問題是,你似乎試圖設置'JTextArea'和其他渲染,但只是簡單地傳回'this' ......所以這與'JTextArea'有什麼關係呢? – MadProgrammer

+0

作爲[示例](http://stackoverflow.com/questions/31042605/java-swing-adding-multiple-lines-in-jtables-cell/31043203#31043203) – MadProgrammer

+0

'新的JTextArea();'應該更像新的JTextArea(3,20); //建議大小!' –

回答

0

這些代碼行會幫你包裝數據並正確顯示多行:

textarea.setWrapStyleWord(true); 
    textarea.setLineWrap(true); 
    DefaultCaret caret = (DefaultCaret) textarea.getCaret(); 
    caret.setUpdatePolicy(DefaultCaret.NEVER_UPDATE); 
相關問題