【问题标题】:Swing: Table cell renderer creates infinite loop [duplicate]Swing:表格单元格渲染器创建无限循环[重复]
【发布时间】:2016-10-08 19:43:43
【问题描述】:

我想创建一个带有单元格换行的摆动表,所以我创建了以下使用 textarea 的渲染器。 问题是如果我在渲染器中使用setRowHeight 方法设置行高,它会创建一个无限循环。我想知道是否有办法实现这一点(没有无限循环的细胞线换行)。

final class RenderTextAreaMessage extends DefaultTableCellRenderer {

    JTextArea textareaMessage;

      @Override 
      public Component getTableCellRendererComponent(JTable aTable, Object aNumberValue, boolean aIsSelected, 
        boolean aHasFocus, int aRow, int aColumn ) {  
         System.out.println("aa");
         String value = (String)aNumberValue;

         textareaMessage = new JTextArea();

         textareaMessage.setLineWrap(true);
         textareaMessage.setWrapStyleWord(true);
         textareaMessage.setText(value);
         textareaMessage.setBorder(null);
         textareaMessage.setMargin(null);

        Component renderer = super.getTableCellRendererComponent(
                aTable, aNumberValue, aIsSelected, aHasFocus, aRow, aColumn
        );

          Font fontType = textareaMessage.getFont();
          FontMetrics fontMet = textareaMessage.getFontMetrics(fontType);
          int fheight = fontMet.getHeight();

          int lineCount = textareaMessage.getLineCount();
          int rowHeight = lineCount * fheight;

        aTable.setRowHeight(aRow,rowHeight+6);      

        return textareaMessage;
      }
}

【问题讨论】:

  • 您显然没有注意到table 标签上的大写消息,其中声明“请勿使用此标签;”。请阅读标签,然后再将它们贴在未来的帖子上。

标签: java swing jtable rendering tablecellrenderer


【解决方案1】:

我创建了一个方法来根据渲染器的当前行高更新行高。但要使用它,您需要为渲染器设置正确的高度(可能使用方法 setPreferredSize())。当您的表格内容是最新的时,只需调用此方法即可。

public static void updateRowHeight(JTable table) {
    final int rowCount = table.getRowCount();
    final int colCount = table.getColumnCount();
    for (int i = 0; i < rowCount; i++) {
        int maxHeight = 0;
        for (int j = 0; j < colCount; j++) {
            final TableCellRenderer renderer = table.getCellRenderer(i, j);
            maxHeight = Math.max(maxHeight, table.prepareRenderer(renderer, i, j).getPreferredSize().height);
        }
        table.setRowHeight(i, maxHeight);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-26
    • 2021-05-16
    • 2010-12-24
    • 2012-06-08
    • 2021-09-24
    • 2011-10-02
    • 1970-01-01
    • 2010-11-14
    相关资源
    最近更新 更多