当前位置: 首页 > 面试题库 >

如何在jtable单元格中换行?

柴华灿
2023-03-14
问题内容

我正在尝试实现本教程中描述的自定义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-
问题。如果没有,我将在此处添加此解决方案。

Update2: 以下代码将确定行高(如果放置在中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中行的高度是固定的,因此不仅仅是包装渲染器而已;我不确定为什么不这样做,但是如果确实如此,则包裹的文本将被裁剪-
也许这正是您所看到的。要调整行高,您需要单独设置它们。



 类似资料:
  • 我的代码有一个特殊的问题。 然后它会发生在图像上出现的事情。我需要汉字列是CENTER对齐,但出于某种原因,'tcr,不工作,因为它应该是,但默认渲染器正在做它应该是。 有什么建议/帮助吗?

  • 问题内容: 我正在寻找一种方法来在表格单元格中显示动画进度指示器(动画GIF,通过Java2D渲染的旋转轮等,此处没有首选项),直到计算或检索出最终显示的值为止。 到目前为止,我只是在尚未准备好加速显示的每个单元格中放置了一个静态的“待处理…”文本。当数据从后台线程到达时,我将其放入适当的单元格中并在表上调用repaint。 使用静态标签或图像可以很好地工作,但是由于单元格渲染仅将其用作橡皮图章,

  • 我对JTable有一个问题,因为最近我开始使用Swing,但我对这个API不太了解。 我想在double的单元格中用点替换逗号。 怎么做呢?

  • 问题内容: 如何在单元格中居中放置值?我正在使用Netbeans。 问题答案: 您需要自定义渲染器。要居中第一列,您可以执行以下操作: 要使所有列都以String数据为中心,您可以执行以下操作:

  • 问题内容: 你们真是太棒了,为我在最后一个问题上指明了正确的方向,我在这里对我原来的问题进行了扩展: 如何将JTable列设置为String并排序为Double? 由于现在我使用自定义单元格渲染器将价格列的格式设置为$ ###,## 0.00,因此我现在还为该单元格设置了JTextField编辑器。单元格的编辑工作正常,除了更新值时,自定义渲染器中设置的数字格式似乎不再格式化单元格(在提交编辑后,

  • 我只想在假设有一个值列表的单元格中添加一个JComboBox。下面是我的代码,但它在列中的所有单元格中添加了组合框。让我知道我的代码中缺少了什么,以便只在选定的单元格上设置组合框。