调整图纸大小以匹配框架大小

Bry*_*ter 6 java swing graphics2d

我写了一个应用程序,自定义绘制paint()内的所有内容基于固定的像素位置.然后我禁用框架的大小调整,使其始终可见.

但是,现在我想能够调整它,但我不想改变我的绘制代码.我希望我可以抓住300x300平方的Graphics g对象并在我的所有绘制代码​​之后将其调整为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);
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢.

tot*_*to2 3

假设您将绘制 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
}
Run Code Online (Sandbox Code Playgroud)

以上是当您想要以全尺寸 (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);
}
Run Code Online (Sandbox Code Playgroud)

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

我没有测试这段代码。这只是为了引导你走向正确的方向。