gpt4 book ai didi

swing - 调整绘图大小以匹配框架大小

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:11:03 24 4
gpt4 key购买 nike

我编写了一个应用程序,它根据固定的像素位置自定义绘制 paint() 中的所有内容。然后我禁用了框架的大小调整,因此它始终可见。

但是,现在我希望能够调整它的大小,但我不想更改我的绘图代码。我希望我可以捕获 Graphics g 对象的 300x300 正方形,并在完成所有绘图代码后将其调整为 JFrame 当前大小,但我不知道我在做什么。

这里是示例代码。在此,我希望 100x100 正方形保留在中间,与调整后的 JFrame 成比例:

package DrawAndScale;

import java.awt.Color;
import java.awt.Graphics;

public class DASFrame extends javax.swing.JFrame {
public DASFrame() {
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
this.setSize(300, 300);
}

public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new DASFrame().setVisible(true);
}
});
}

@Override
public void paint(Graphics g) {
g.setColor(Color.BLACK);
g.fill3DRect(100, 100, 100, 100, true);
}
}

谢谢。

最佳答案

假设您将绘制 300x300 的方法重命名为 paint300,定义一个缓冲图像:

@Override public void paint(Graphics g) {
Image bufferImage = createImage(300, 300); // empty image
paint300(bufferImage.getGraphics()); // fill the image
g.drawImage(bufferImage, 0, 0, null); // send the image to graphics device
}

以上是您想要以全尺寸 (300x300) 绘制时的情况。如果您的窗口已调整大小:

@Override public void paint(Graphics g) {
Image bufferImage = createImage(300, 300);
paint300(bufferImage.getGraphics());
int width = getWidth();
int height = getHeight();
CropImageFilter crop =
new CropImageFilter((300 - width)/2, (300 - height)/2 , width, height);
FilteredImageSource fis = new FilteredImageSource(bufferImage, crop);
Image croppedImage = createImage(fis);
g.drawImage(croppedImage, 0, 0, null);
}

新类来自 java.awt.image.*。

我没有测试这段代码。这只是为了让您朝着正确的方向前进。

关于swing - 调整绘图大小以匹配框架大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7123686/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com