在没有滚动条滚动的情况下调整JScrollPane客户端的大小

时间:2009-12-14 15:13:06

标签: java swing client size jscrollpane

我有一个JScrollpane,它包含一个可滚动的客户端,可以在使用应用程序时动态更改其大小。我希望JScrollPane能够在客户端大小更改的情况下,在不移动视口的情况下了解更改

澄清我的意思: 请参阅Sun的文章如何使用滚动窗格中的Java Webstart示例ScrollDemo2。单击窗口底部时,窗口外部会出现一个圆圈,滚动条移动。这是我想要避免的后一种行为。

我的猜测是,只需在滚动窗格解决方案中涉及的众多组件之一中设置一个简单的标志,但我无法找到它的位置。有谁知道吗?

2 个答案:

答案 0 :(得分:1)

我设法通过覆盖JScrollPane中视口的标准行为来解决这个问题。这可能是一个不适合所有人的解决方案,但在我的GUI中,这就像一个魅力。

JScrollPane pane = new JScrollPane();
pane.setViewport(
  new JViewport(){
    /**
     * An empty override implementation to prevent undesired scrolling on
     * size changes of the client.
     */
     @Override
     public void scrollRectToVisible(Rectangle rect){}
  });

答案 1 :(得分:0)

我会尝试类似的事情:

Point p = scrollPane.getViewport().getViewportPosition();
revalidate();
scrollPane.getViewport().setViewportPosition(p);

您可能需要将最后一行代码包装在SwingUtilities.invokeLater中。

如果这不起作用,那么你可以在revalidate()之前和之后禁用/启用视口吗?