gpt4 book ai didi

java - JTable 和 JScrollpane 大小的问题

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:01:24 26 4
gpt4 key购买 nike

我有一个 JScrollPane,里面有一个 JTable。在 JTable 中,我最初有 3 行。稍后添加行。

我的 3 行的默认 JTable 很难看,因为 JScrollPane 从客户端调用 getPreferredScrollableViewportSize (JTable)并且返回值始终相同。这就是为什么我的 JTable/JScrollpane 有 3 行有这个空闲空间,JScrollpane 和 JTable 没有相同的大小。

我的解决方案是创建一个子类 JTable,覆盖 getPreferredScrollableViewportSize 并在此函数 getPreferredSize(); 中返回。现在整个 JScrollPane 的大小正好是第 3 行 `JTable!

当添加一行时,我有命令 ((JComponent) scrollPane.getParent()).revalidate();

滚动 Pane 随表格增长。

一切正常!

但是现在我想给scrollpane(面板)的容器设置一定的布局:myjpanel.setLayout (new BoxLayout(contentPane, BoxLayout.Y_AXIS));

当我添加此命令时,我的整个解决方案不再有效。滚动 Pane 没有 3 行表格的大小,这个空闲空间又在那里了。

这是为什么?

有人有解决办法吗?

继续

感谢 camickr 为我指明了正确的方向。我的解决方案如下:

    scrollPane = new JScrollPane (table) {          
public Dimension getMaximumSize () {
double height = 0;

double width = super.getMaximumSize().getWidth();
height += columnHeader.getViewSize().getHeight();
height += viewport.getView().getPreferredSize().getHeight();
height += (getViewportBorderBounds().getHeight() * -1);
Dimension returnValue = new Dimension ((int) width, (int) height);
return returnValue;
}
};

现在一开始就可以了。但是当一行被添加到 jtable 并且我调用 revalidate();在 jpanel(滚动面板的父容器)上,jscrollpanel 的高度缩小到 1 行 + 标题!有没有人知道在这种情况下该怎么做。

继续

现在我知道问题所在了。它是视口(viewport)边框。为了获得完整的、准确的高度,我必须计算 View (Jtable) 的高度、列标题的高度和 viewportBorder 的高度。第一次 getViewportBorderBounds().getHeight() 返回 -3,下一次 - 在表格模型中插入新行后 - 函数返回 48。我不明白为什么这个函数现在返回 48 .另一点是 camickr 说改变 jscrollpane 的大小会破坏滚动 Pane 的目的。我不明白。即使 jtable 开头只有 3 行,任何人怎么可能对 450 x 400 (http://www.javalobby.org/java/forums/t19559.html) 的默认 jscrollpane 大小感到满意。这个未填充的额外空间在我眼中看起来不是很专业。有没有人对此有更好的解决方案。

非常感谢您的回答

续现在一切正常!一开始我只是将 jscrollpane 边框设置为 0 ... sp.setBorder(createEmptyBorder());通过这种方式,我避免了 getViewportBorderBounds().getHeight() 这些奇怪的返回值沃尔夫冈

最佳答案

BoxLayout 允许组件增长到组件的最大尺寸。我想您需要覆盖滚动 Pane 的 getMaximumSize() 以返回首选大小。

When a row gets added I have the command "((JComponent) scrollPane.getParent()).revalidate();" The scrollpane grows with the jtable.

这种做法违背了滚动 Pane 的目的。滚动条应该保持固定大小,然后滚动条会在必要时出现。

关于java - JTable 和 JScrollpane 大小的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6234530/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com