【发布时间】:2017-11-20 18:42:12
【问题描述】:
我有一个 JScrollPane,其中包含另一个带有 GridBagLayout 的面板(它带有一个 JTabbedPane 和一个 JSplitPane ,但我认为这没有什么区别)。
我想要的很简单:如果 ScrollPane 的尺寸太小,显示垂直滚动条,以便所有元素都可见。为了实现这一点,我为 ComponentListener.componentResized 编写了一个简单的函数,它获取最后一个元素的位置,添加高度并减去面板本身的 offset: p>
int prefSize = lastButton.getLocationOnScreen().y + lastButton.getSize().height - myGridPanel.getLocationOnScreen().y;
myGridPanel.setPreferredSize(new Dimension(400, prefSize));
遗憾的是,这仅在我手动调整窗口大小之后有效。在此之前,滚动条直到最后才会到达,因此有几行无法到达,并且最顶部的 JTextPane 元素被部分隐藏。正如我所说,只要我调整窗口大小(增加或减少大小,垂直或水平),每个元素都是正确的,滚动条也是完美的,一直滚动到最后一个元素之后。
我可以通过在创建框架或切换到选项卡时添加以下内容来改善这种情况 (stateChanged()):
mainFrame.pack();
setPreferredSize();
mainFrame.setSize(dim);
mainFrame.revalidate();
mainFrame.repaint();
现在,除了最后一行之外的所有行都是可滚动的,而最后一行仅可见约 30%。再次......一旦我手动调整框架大小,一切看起来都符合预期。
感觉好像我错过了一些简单的东西,但我不知道它会是什么。环顾四周,我看到了添加 setPreferredSize(panel.getPreferredSize()); 的建议,但这也没有帮助。
我将不胜感激!
提前致谢!
【问题讨论】:
标签: java swing resize jscrollpane