1

我有一个 JScrollpane,其中包含一个可滚动客户端,可在使用应用程序时动态更改其大小。我希望 JScrollPane在客户端大小发生变化时无需移动视口就能知道这些变化。

为了澄清我的意思:请参阅Sun 的How to use scroll panes一文中的 Java Webstart 示例ScrollDemo2。单击窗口底部时,窗口外部分会出现一个圆圈,并且滚动条会移动。这是我想避免的后一种行为。

我的猜测是,这只是在滚动窗格解决方案中涉及的众多组件之一中设置一个简单标志的问题,但我就是找不到它在哪里。有人知道吗?

4

2 回答 2

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){}
  });
于 2009-12-15T08:23:21.433 回答
0

我会尝试类似的东西:

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

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

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

于 2009-12-14T16:00:21.503 回答