但如果 JFrame 大小发生变化,JPanel 将缩放,保持 800x600 的原始大小。例如,如果我在 JPanel 上画一个字符串,并将窗口拉伸 2 次,字符串也会拉伸 2 次。
我试过了
g2d.scale(frame.getWidth() / 800, frame.getHeight() / 600);
但是如果我将框架宽度更改为 0.5,背景上的颜色(g2d.scale
之后g2d.fillRect
使用)将仅覆盖框架的一半。
我在 Swing 中可以说的第一件事是,永远不要自己画画,而是使用 LayoutManager 进行布局。当您确实需要自己绘制时,请从原始版本创建一个新的 Graphics2d 并在使用后处理。在此图形上,您可以设置属性。
首先,我会考虑将面板放在框架内的边框布局(中心)中。没有你的代码,很难知道如何帮助你。
找到了这个问题的解决方案。
在创建面板时创建缓冲图像,即
bimg = new BufferedImage(800, 600, BufferedImage.TYPE_INT_RGB);
从中得到了图形,即。
g2d = bimg.createGraphics();
对其执行所有绘制操作,然后在 JPanel 上绘制缩放后的图像。
g.drawImage(bimg, 0, 0, getWidth(), getHeight(), null);
(其中 getXX() 返回面板的 XX)。调整窗口大小后,很明显,在 BufferedImage 上绘制的背景和字符串被拉伸,保持原始大小相同。