2016-05-13 9 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();'はもっと'new JTextArea(3,20);のように。 //サイズを提案してください! –

答えて

0

これらのコード行は、データをラップするためのお手伝いをし、適切に複数の行を表示します:

textarea.setWrapStyleWord(true); 
    textarea.setLineWrap(true); 
    DefaultCaret caret = (DefaultCaret) textarea.getCaret(); 
    caret.setUpdatePolicy(DefaultCaret.NEVER_UPDATE); 
関連する問題