如何制作没有JScrollPane的JTable

4
我已经进行了一些相当不错的搜索,但我无法找到我要找的内容。基本上,我想在JPanel中放置一个JTable,并使该JPanel根据JTable的大小重新调整大小。我知道实现JTable的通常方法是使用JScrollPane,但在这种情况下它是不必要的,而且会让我的程序看起来很混乱。
我找不到所需答案的原因是每当有人问关于JPanel中的JTable时,有人都会给他们放入滚动窗格的答案。我知道使用滚动窗格的优点,但在这种情况下它们并不优越。

你可能想添加一张截图来解释为什么你认为它看起来很乱? - Wim Deblauwe
我想我应该解释一下。我正在使用JGraphX库并尝试创建自定义顶点布局。它是通过使用普通的Swing组件完成的。每个顶点都有一个包含信息的表格,其中行数不是很多,只有5列。在每个节点上放置滚动窗格会很混乱,而仅使用可轻松查看信息的jtable会使其更直观和更清洁。 - user1027959
2个回答

8
  1. 可以将JTable添加到JPanel中,注意要填满真实屏幕分辨率的几行

  2. 还需要将TableHeader单独添加到容器中,否则不会被添加或显示在JTable中,对于放置在JScrollPane中的JTable,不需要单独添加或定义TableHeader

  3. 更好的方法是通过JScrollPane.setBorders(null)移除边框,并将VERTICALHORIZONTAL_SCROLLBAR设置为NEVER来禁用它们

  4. 为了缩小更宽的JScrollPane以适应JTables Dimension,可以使用table.setPreferredScrollableViewportSize(table.getPreferredSize());


非常感谢。我在这些论坛和JGraphx论坛上搜索了很久,但没有看到那篇帖子。对于这个问题,标题并不是真正的问题。所以我可能会像链接中的人一样去做! - user1027959
@mKorbel,你有没有添加 JTableHeader 到容器或 JComponent 的示例? - Igor
@Igor如果你想要分离JTableHeader而没有JTable,建议使用JButtons。 - mKorbel
@mKorbel,我不确定你的意思,但是我想要能够将JTableHeader放置在任何组件(JPanel、JComponent等)的顶部。 - Igor
使用JButton(由GridLayout布置)而不是JTableHeader,这是更好的方法,没有副作用。 :-) - mKorbel
@mKorbel 好主意,谢谢。它们在 Windows 上看起来几乎一样,如果不是完全一样的话,在 Mac 上看起来会很奇怪吧? - Igor

0
尝试覆盖你的JPanel的getPreferredSize()方法,并返回你的JTable的getPreferredSize()值:
final JTable table = new JTable();

JPanel panel = new JPanel() {
    public Dimension getPreferredSize() {
        return table.getPreferredSize();
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接