【发布时间】:2016-09-09 09:10:28
【问题描述】:
我想渲染一个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;
}
}
问题是文本没有换行,所以我无法完全看到长文本。我做错了什么?
【问题讨论】:
-
一般来说,换行并不是最难的部分,你可以将文本换行在
<html>标签中,它会换行,问题在于使行足够大以实际适合文本(顺便说一句,不要在渲染器中设置行高,这不是它的工作)。问题是,您似乎正在尝试设置JTextArea和其他一些渲染,但只是简单地传回this...那么这与JTextArea有什么关系? -
作为example
-
new JTextArea();应该更像new JTextArea(3,20); //suggest size! -
如需尽快获得更好的帮助,请发帖minimal reproducible example 或Short, Self Contained, Correct Example。
-
我认为您可以使用带有
<html>标签的 DefaultTableCellRender 包装文本。并且 JTextArea 可以用作 EditorComponent 而不是将其用作渲染器组件。
标签: java swing jtable jtextarea