2016-05-13 64 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); 
相关问题