5

少し問題があります。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();
        }
    }
}
4

1 に答える 1

10

最初に drawImage を実行するときは、x と y だけでなく、幅と高さも設定する必要があります。そうして初めて、画像を拡大縮小できます。

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

フォームのサイズを変更するとキャンバスが再描画されるはずですが、そうでない場合は .repaint(); で強制できます。

追加: フォームと同じサイズにしたいとおっしゃいました。次に、2 つのことを行う必要があります。最初に、キャンバスを参照する幅 this.getWidth() および高さ this.getHeight として上記のメソッドを使用します。適切なレイアウトマネージャーを選択するだけで、キャンバスがフレームに合わせて拡大縮小されることを確認する必要があります。

frame.setLayout(...)
于 2013-05-09T23:31:17.463 に答える