Java 使用JScrollPane进行滚动和真正大且缩放的自定义绘图

Java 使用JScrollPane进行滚动和真正大且缩放的自定义绘图,java,swing,jscrollpane,simulator,circuit,Java,Swing,Jscrollpane,Simulator,Circuit,我在一个私人项目中工作。在我的项目中,我使用JPanel来绘制我的内容。我可以使用仿射变换移动和缩放它。每次调用paint()时,我都会绘制用户应该看到的图形区域。这幅画可以很大(我对它的大小没有限制)。我使用一个矩形来跟踪图形的可见区域,并在JPanel graphics2d中绘制它 现在我想添加滚动条来移动我的视口,我认为JScrollPane会很有用。我看到很多帖子都在谈论使用JPanel和JScrollPane来滚动简单内容。第一个问题是,我不喜欢这个解决方案,因为scrollpane确

我在一个私人项目中工作。在我的项目中,我使用JPanel来绘制我的内容。我可以使用仿射变换移动和缩放它。每次调用paint()时,我都会绘制用户应该看到的图形区域。这幅画可以很大(我对它的大小没有限制)。我使用一个矩形来跟踪图形的可见区域,并在JPanel graphics2d中绘制它

现在我想添加滚动条来移动我的视口,我认为JScrollPane会很有用。我看到很多帖子都在谈论使用JPanel和JScrollPane来滚动简单内容。第一个问题是,我不喜欢这个解决方案,因为scrollpane确实可以滚动JPanel。在所有的例子中,我应该画出所有的面板区域!。我只画面板的可见区域,因为它非常耗时

因此,我的问题是:如何使用scrollpane移动自定义视口并反映更改(我不想滚动用于绘图的jpanel)?或者我应该使用一个JPanel和两个简单的JScrollbars吗

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

谢谢你的建议


(对不起我的英语)

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


关于这一点,重要的是要记住,剪切矩形表示的区域是“新”或“更改”区域,而不是可视区域,这是出于优化的原因…

Aha。。因此,我应该将面板preferredSize设置为绘图的大小,并使用剪裁区域来知道要绘制什么?我没听错吧?(很抱歉耽搁了,我今天找到了你的答案)基本上是的。你需要玩弄它,但是这个概念应该有用。。。