【问题标题】:how to set various row heights for a one JTable如何为一个 JTable 设置不同的行高
【发布时间】:2012-08-09 14:52:17
【问题描述】:

我有一个包含一列的 JTable,每个表格单元格的单元格渲染是动态生成的 JPanel,因此每个表格单元格的高度应该根据其 JPanel 不同,我试图在 jpanel 所在的位置更改行高被渲染但它不工作。请告诉我如何在 JTable 中设置不同的 JTable 行高,

这就是我尝试这样做的方式,

    private QCellPanel renderer = new QCellPanel();
    private QCellPanel editor = new QCellPanel();

    @Override
    public Object getCellEditorValue() {
        return editor.getQuestion();
    }

    @Override
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
        renderer.setQuestion((Qusetion) value);

        table.setRowHeight(renderer.getPreferredSize().height);
        return renderer;
    }

    @Override
    public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
        editor.setQuestion((Qusetion) value);
        table.setRowHeight(editor.getPreferredSize().height);
        return editor;
    }

【问题讨论】:

  • 面板中有什么?为什么它们的高度不同?
  • 强调@Jacob Raihle 已经提到的内容:永远不会在渲染器回调方法中更改目标的状态 - 所有参数都是严格只读的
  • 是的,这个面板包含的组件可能有不同的高度。
  • “此面板包含的组件可能具有不同的高度。” 这完全告诉我没有问题还不清楚!跨度>

标签: java swing jtable tablecellrenderer


【解决方案1】:

您需要使用两个参数版本setRowHeight(rowNumber, height)

如果可能,您还应该避免在getXComponent 方法中更改行高,因为setRowHeight 会强制重绘表格,这将导致它再次请求渲染器组件等...默认只要高度稳定,实现可能足够聪明,不会触发它,但如果你最终出现无限循环,我会先看看:)

【讨论】:

    猜你喜欢
    • 2015-04-15
    • 1970-01-01
    • 2011-11-22
    • 1970-01-01
    • 1970-01-01
    • 2014-05-22
    • 2020-09-03
    • 2019-05-22
    • 2013-03-29
    相关资源
    最近更新 更多