我有点问题。我正在学习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();
}
}
}
答案 0 :(得分:4)
首先,当你执行drawImage时,你不仅要设置x和y,还要设置宽度和高度。只有这样你才能缩放图像。
drawImage(Image img, int x, int y, int width, int height, ImageObserver observer)
当您重新调整表单大小时,您的画布应该重新绘制,但如果没有,您可以使用.repaint()强制它;
此外: 你告诉我你希望它和你的表格一样大小。那你要做两件事。 首先使用上面提到的方法作为宽度this.getWidth()和高度this.getHeight,其中这是指画布。你必须确保你的画布与你的框架一致,你可以通过选择合适的布局管理器来做到这一点。
frame.setLayout(...)