我正在构建一个处理截图的小型Java应用程序。 我有一个继承自JPanel的自定义类,名为ScreenshotPanel,用于保存图像,它位于JScrollPane中。调整帧大小时,ScrollPane会移动并调整大小。 一切正常,除了缩放部分,我希望能够控制ScrollPane内的screenshotPanel的大小,但是screenshotPanel没有调整大小,它在适当的大小闪烁一会然后它被调整大小回到ScrollPane大小
如果我在没有ScrollPane的情况下使用screenshotPanel它完全正确,但我希望它能自动添加滚动条,这样你就可以看到在放大时移动图像。
以下是我用来调整大小的代码部分:
double AR=((double)screenshotPanel.getImage().getHeight())/screenshotPanel.getImage().getWidth();
screenshotPanel.setSize((int)((getWidth()-180)*zoomFactor), (int)((AR*(getWidth()-180)-100)*zoomFactor));
scrollPane.setSize(getWidth()-180, (int)(AR*(getWidth()-180))-100);
-180和-100用于为按钮和缩放控制组件保留一个空间(所有这些都可以完美地移动和调整大小),zoomFactor是一个可以容纳缩放量的双倍。
如何在没有ScrollPane强制缩小尺寸的情况下调整ScrollPane中的screenshotPanel的大小?
答案 0 :(得分:1)
更改组件的大小不会缩放图像,除非您在paint方法中有代码来补偿大小的变化。
JViewPort
尊重您的组件首选大小,因此当您更改大小并且视口重置它时,您会得到此闪烁。
在面板中添加scale
方法并覆盖getPreferredSize
方法。
当您致电setScale
时,请计算新的缩放尺寸。确保getPreferredSize
方法返回这些值。
您需要致电invalidate
,可能还需要repaint
,以确保通过容器层次结构更新更改。
请记住,窗格不会自行调整图片大小,您负责拍摄;)