JTable动态更改行高[重复]

Posted

技术标签:

【中文标题】JTable动态更改行高[重复]【英文标题】:JTable change the row height dynamically [duplicate] 【发布时间】:2011-03-28 03:35:32 【问题描述】:

我在动态更改行的高度时遇到问题,是否有需要重载的方法?

--编辑--

抱歉,这是我的第一篇短文……我的问题实际上与根据内容更改行高有关。所以到目前为止我所做的是创建了一个实现 TabelCellRenderer 的内部类。

这就是我目前正在做的行高计算。

  private static class TextAreaRenderer extends JTextPane implements TableCellRenderer
  


  public Component getTableCellRendererComponent(JTable table, Object value,
                                                 boolean isSelected,
                                                 boolean hasFocus, int row,
                                                 int column)
  
      /* Setup Code here */

      this.setText(((String)value).getEntityName());
      int height = new Double(this.getPreferredSize().getHeight()).intValue();
      if (table.getRowHeight(row) < height)
          table.setRowHeight(row, height);

      /* some more code */

      return this;
  

这是正确的方法吗? 谢谢。

【问题讨论】:

不,渲染器不应该改变表格行的高度。这应该在将数据添加到模型时完成。这意味着您将在创建表时进行计算。然后你会使用 TableModelListener 来监听数据的变化,然后重新计算。 感谢这是一个更好的解决方案,因为它在数据层和视图层之间创建了分离。此外,我只需将代码放在一个地方,而不必担心每次更改表格布局时都会创建更新代码。 @camickr,数据与视图无关。向模型添加数据时应该如何计算高度的行?模型和数据必须独立于视图。 IS 确实是设计的视图部分,应该计算如何将某些数据适合将要显示的任何小部件。我不是说它应该是渲染器,但模型肯定不应该。 I'm not saying that it should be the renderer, but for sure the model shouldn't. - 我没有说模型应该这样做。我建议你应该使用 TableModelListener 以便知道数据何时发生变化,然后调用逻辑来重新计算高度。 因为我花了 2 天时间才完成这项工作,我尝试了 - TableModelListener 不是解决方案。当模型更改而不是表 GUI 重绘时调用它。在引发模型事件时,表格 GUI 可能(并且根据我的经验永远不会)与模型保持同步。我处理的事情就像在上面的代码中一样(我的问题在这里描述:***.com/a/37158209/478765)。我有 1 列 JTable(作为完全行为不端的 JList 的替代品)。这效果很好。 【参考方案1】:
table.setRowHeight(...);

如果您需要更多帮助,请发布您的 SSCCE。

【讨论】:

接受。非常直接的答案...【参考方案2】:

您只需拨打setRowHeight(row, height);。例如:

JTable t = new JTable(5, 5);
t.setRowHeight(2, 30);

将第 3 行设置为 30 高。

你的问题更复杂吗?你对这个问题没有说太多。

【讨论】:

以上是关于JTable动态更改行高[重复]的主要内容,如果未能解决你的问题,请参考以下文章

请教大家:使用sdwebimage下载图片完成后更新cell中的imageview如何动态更改行高

ttk.Treeview - 无法更改行高

如何动态更改行?

在 JTable 中禁用用户编辑 [重复]

隐藏JTable中的列[重复]

将 JScrollPane 滚动到 JTable 上的特定行 [重复]