当形状位于 JPanel 外部时自动滚动

发布于 2024-10-20 17:00:42 字数 108 浏览 4 评论 0原文

我有一个 JPanel,可以在其中绘制形状。该面板被添加到scrollPane 中。但当形状不在场景中时,滚动不起作用。有没有一种简单的方法可以自动滚动,或者我必须以编程方式进行。

谢谢

I have a JPanel where I draw shapes. this panel is added to a scrollPane. but the scrolling doesn't work when a shape is out of the scene. is there an easy way to autoscroll or I have to do it programmatically.

Thank you

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

风和你 2024-10-27 17:00:42

我假设您使用 JPanel 作为自定义绘图的画布(即您没有向其中添加任何 JComponent)。如果是这种情况,JScrollPane 无法知道 JPanel 有多大,并且只会调整其大小以精确填充scrollPane 的视口(这意味着您永远不会真正获得滚动条)。

要解决此问题,您应该覆盖 JPanel 上的 getPreferredSize。

@Override     
public Dimension getPreferredSize() {
    int height = calculateHeight(); 
    int width = calculateWidth(); 
    return new Dimension(width, height);
}

编辑:

此外,由于您正在进行自定义绘制,因此请确保每当您要绘制的形状发生变化时都调用重新验证。这告诉 swing 它需要重新考虑 JPanel 的布局/大小。

I'm assuming you're using the JPanel as a canvas for custom drawing(i.e. you're not adding any JComponents to it). If that's case, the JScrollPane has no way of knowing how large the JPanel is and will just size it to exactly fill the scrollPane's viewport(which means you'll never actually get scroll bars).

To fix this issue you should override getPreferredSize on your JPanel.

@Override     
public Dimension getPreferredSize() {
    int height = calculateHeight(); 
    int width = calculateWidth(); 
    return new Dimension(width, height);
}

Edit:

Also, since you're doing custom drawing make sure to call revalidate whenever the shapes you want to draw change. This tells swing that it needs to re-think the layout/size of the JPanel.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文