0

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

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

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

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

感谢您的任何建议!

(对不起我的英语不好)

4

1 回答 1

1

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

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

于 2014-06-20T03:12:44.210 回答