【问题标题】:Column dividers in JTable or JXTableJTable 或 JXTable 中的列分隔符
【发布时间】:2023-03-07 20:57:01
【问题描述】:

我有一个 JTable(或者更准确地说是一个 JXTable),其中包含我想要划分的 3 个分组列部分。 我曾经有 3 个以编程方式链接的表(滚动条位置、排序、选择)。我使用了很多代码来获得这个链接,我想摆脱这个。 现在我正在切换到 1 个 JXTable,因为这个表类中有一些更好的东西。

对于几乎相同的问题,我找到了一些(不是很令人满意)的解决方案。 也许有人对我有好的建议。

选项 1:一个空列作为分隔符(另一种颜色,如灰色),并在使用箭头或 Tab 键时以编程方式跳过该空列。

选项 2:将 1 列的一侧的边距设置为更大的尺寸,因此它看起来像一个分隔线。直到现在我才知道如何设置所有列的边距

选项 3:再次回到 3 个单独的表(尤其是要以相同的方式对表进行排序需要大量工作,因为我不想重复单独部分中的列)。这意味着我必须重写我的表格排序器,对不可见的列进行排序。

欢迎任何建议(如果三个给定选项都不是)

【问题讨论】:

  • 对于您的选项 2,您可以使用 JTable#prepareRenderer 更改特定行/列的组件,例如在组件的特定侧周围添加空边框。
  • @Robin:感谢您的评论和建议。戴夫回答了大约。一样,但由于代码和示例屏幕截图,我更喜欢他的回答。
  • @Robin - JXTable 错误(如你所知 ;-) SwingX 应用视觉装饰的方式是亮点
  • @kleopatra 确实如此。我差点忘了那些。应该赶紧更新我的SwingX知识

标签: java jtable swingx jxtable


【解决方案1】:

通过覆盖第 3 列上的单元格渲染器以具有粗右边框且没有其他边框,我已经做出了一些看起来有点像您想要的东西。您可以在表格列标题中执行相同的操作,以使边框向上延伸。它显然将边框放置在单元格内,但这对您来说可能就足够了。

  {
    ....
    table.getColumnModel().getColumn(2).setCellRenderer(
        new ThickRightBorderCellRenderer());
    ....
  }

  private static class ThickRightBorderCellRenderer
          extends DefaultTableCellRenderer {

    @Override
    public Border getBorder() {
      return BorderFactory.createMatteBorder(0, 0, 0, 3, Color.BLACK);
    }
  }

【讨论】:

  • 谢谢你的例子,即使有截图!这可以解决问题......已经投票给你,在我选择这个作为答案之前,我想等待更多/其他建议......然后试试这个......
  • 我玩了一下,这正是我需要的东西,在标题上使用相同的技巧也是一个很好的建议!
  • 对于 JXTable,永远不会是 DefaultTableCellRenderer 的子类。相反,实现一个做装饰的荧光笔
  • @kleopatra:有什么方法可以做到这一点吗? (我的意思是只有 1 个边框)
猜你喜欢
  • 1970-01-01
  • 2013-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多