如何在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