java - 如何在使用 drawImage 调整帧大小时调整图像大小

标签 java

我有个小问题。我正在学习 Java 表单,我想在调整表单大小时调整图像大小。但不幸的是我只调整表格大小。图像仍然具有这些相同的尺寸。我怎样才能重新缩放图像?我应该改变什么?我做错了什么? 我附上代码:

    package przegladarka;
import java.io.*;
import java.util.ArrayList;
import java.awt.*;

import javax.swing.*;
public class view extends JPanel {
    Image imag; 
    Dimension size;
    public static int framew=300;
    public static int frameh=300;
    static String[] children;
    static ArrayList<String> sciezki = new ArrayList<String>(); 

    public static void main(String[] args) {
        File folder = new File("./zdjecia/");
        visitAllFiles(folder);

        JFrame frame = new JFrame("Przegladarka");
        frame.setSize(300, 300);

        frame.setVisible(true);
        frame.getContentPane().add(new MyCanvas());
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   
    }



    public static void visitAllFiles(File dir) {
        if (dir.isDirectory()) {
            children = dir.list();
            for (int i = 0; i < children.length; i++) {
                visitAllFiles(new File(dir, children[i]));
                System.out.println(""+children[i]);
                Image imag = Toolkit.getDefaultToolkit().getImage(children[i]); 
            }

        } else {
            System.out.println(dir.getAbsolutePath() + " is being processed.");
            sciezki.add(dir.getAbsolutePath());
        }
    }
}
class MyCanvas extends JComponent{
    public void paint(Graphics g){
        Graphics2D g2d = (Graphics2D) g;

        for(int i=0; i<view.sciezki.size();i++){

            Image imag = Toolkit.getDefaultToolkit().getImage(view.sciezki.get(i));


        g2d.drawImage(imag, 0, 0, this);

        g2d.finalize();
        }
    }
}

最佳答案

首先,当您执行 drawImage 时,您不仅必须设置 x 和 y,还必须设置宽度和高度。只有这样,您才能缩放图像。

drawImage(Image img, int x, int y, int width, int height, ImageObserver observer) 

当您调整表单大小时,您的 Canvas 应该重新绘制,但如果没有,您可以使用 .repaint() 强制重新绘制;

补充: 您告诉我您希望它与您的表单大小相同。然后你必须做两件事。 首先,您使用上面提到的方法,宽度为 this.getWidth() ,高度为 this.getHeight ,其中 this 指的是 Canvas 。您必须确保您的 Canvas 随您的框架缩放,您可以通过选择合适的布局管理器来简单地做到这一点。

frame.setLayout(...)

关于java - 如何在使用 drawImage 调整帧大小时调整图像大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16472217/

相关文章:

Java 堆空间不足错误

java - Spring mvc 多部分

java - 如何动态实例化引用其他类的类

java - com.example.appname.MainActivity.onCreate 处的 AndroidRuntime 错误

java - 从旧版 Tomcat 运行标签库

java - 非法选项: -cacerts for keytool in gitlab-ci with gradle:jdk8

java - 通过创建自己的坐标类而不是使用 Point2D 来提高性能

java - 此应用程序出现白色标签错误没有明确的/错误映射,因此您将其视为 Spring boot 中的后备方案

java - 在数据库插入之前修剪空格

java - 将 Java 转换为 Scala