如何在jtable单元格中换行?

我正在尝试实现本教程中描述的自定义TableRenderer

。我想让渲染器对每个给定单元格很长的文本进行换行。这个想法是,使用TextArea作为渲染器,因为它支持换行。但是,以下代码无法正常工作:

public class LineWrapCellRenderer  extends JTextArea implements TableCellRenderer {

@Override

public Component getTableCellRendererComponent(

JTable table,

Object value,

boolean isSelected,

boolean hasFocus,

int row,

int column) {

this.setText((String)value);

this.setWrapStyleWord(true);

this.setLineWrap(true);

return this;

}

}

我将此渲染器设置为

table.setDefaultRenderer(String.class, new LineWrapCellRenderer());

但是单元格条目保持未包装状态。如果我添加this.setBackground(Color.YELLOW)到该getTableCellRendererComponent()方法,则所有单元格都按预期是黄色,但没有被包裹。

有任何想法吗?

正如Michael

Borgwardt在评论中指出的那样,问题不在于换行,​​而是行高:JTables行是固定大小的,因此,如果单元格越来越大(因为文本现在是多行的),我们必须增加行高。但是多少钱?我将检查这是否值得另一个SO-

问题。如果没有,我将在此处添加此解决方案。

以下代码将确定行高(如果放置在中getTableCellRendererComponent()):

int fontHeight = this.getFontMetrics(this.getFont()).getHeight();

int textLength = this.getText().length();

int lines = textLength / this.getColumns() +1;//+1, cause we need at least 1 row.

int height = fontHeight * lines;

table.setRowHeight(row, height);

回答:

问题在于JTable中行的高度是固定的,因此不仅仅是包装渲染器而已;我不确定为什么不这样做,但是如果确实如此,则包裹的文本将被裁剪-

也许这正是您所看到的。要调整行高,您需要单独设置它们。

以上是 如何在jtable单元格中换行? 的全部内容, 来源链接: utcz.com/qa/428452.html

回到顶部