【问题标题】:Using JScrollPane for scroll and really big and zoomed custom drawing使用 JScrollPane 进行滚动和非常大且缩放的自定义绘图
【发布时间】:2014-08-10 17:49:36
【问题描述】:

我正在从事一个个人项目。 a circuit simulator if you are interested。在我的项目中,我使用 JPanel 来绘制我的内容。我可以使用 AffineTransformations 移动和缩放它。每次调用paint() 时,我都会绘制用户应该看到的绘图区域。图纸可以很大(我对它的大小没有限制)。我使用一个 Rectangle 来跟踪我的绘图的可见区域并在 JPanel graphics2d 中绘制它。

现在我想添加滚动条来移动我的视口,我认为 JScrollPane 很有用。我看到很多线程都在谈论使用带有 JScrollPane 的 JPanel 来滚动简单的内容。第一个看是this one,但我不喜欢这种解决方案,因为滚动窗格确实滚动了JPanel。在所有示例中,我应该绘制所有面板区域!我只绘制面板的可见区域,因为它非常耗时。

所以,我的问题是:如何使用滚动窗格来移动我的自定义视口并反映更改(我不想滚动用于绘图的 jpanel)?还是应该使用一个 JPanel 和两个简单​​的 JScrollbars?

我找不到从头开始实现 Scrollable 界面的简单指南。所有教程都从 JPanel 或 JLabel 开始

感谢您的建议!

(对不起我的英语)

【问题讨论】:

    标签: java swing jscrollpane simulator circuit


    【解决方案1】:

    假设您使用paintComponent 绘制内容,您可以检查Graphics 剪辑边界。这将告诉您哪些区域需要重新绘制,当从JScrollPane 查看时,滚动窗格将减少它想要重新绘制的区域以满足其可视区域。

    重要的是要记住,剪切矩形所代表的区域是“新”或“更改”区域,而不是可视区域,这样做是出于优化原因...

    【讨论】:

    • 啊哈.. 所以我应该将面板 preferredSize 设置为我的绘图的大小并使用剪切区域来知道要绘制什么?我对你的理解正确吗? (抱歉耽搁了,我今天找到了你的答案)
    • 基本上,是的。您将需要使用它,但这个概念应该有效......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-04
    • 1970-01-01
    • 2018-08-30
    • 1970-01-01
    • 1970-01-01
    • 2017-01-21
    • 2016-10-01
    相关资源
    最近更新 更多