1

アプレット画面に簡単な画像を表示するためにこのコードを作成しましたが、アプレットウィンドウのサイズを変更するまで画像が表示されません。これを克服するにはどうすればよいですか?

public class Test extends JApplet {
    public void init () {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createGUI();
            }
        });
    }
    public void start() {
    }
    public void createGUI() {
        getContentPane().add(new GUIThing(getImage(getCodeBase(), "gladiator.gif")));
    }
}

public class GUIThing extends JPanel {
    Image image;
    public GUIThing(Image i2) {
        image=i2;
    }
    public void paintComponent(Graphics g) {
        Graphics2D g2=(Graphics2D) g;
        g2.drawImage(image,100,100,100, 100, null);
    }
}
4

1 に答える 1

1

アプレットコンテキストをdrawImageメソッドに渡してみてください。これにより、画像が読み込まれたときにアプレットに通知され、それ自体が再描画されます。

g2.drawImage(image,100,100,100, 100, this);

そして、あなたが本当に必死ならinvalidate() repaint()startメソッドを呼び出してください

例を使用して更新

これは私が使用したコードです。画像の読み込みに問題はありませんでした。

public class TestApplet extends JApplet {

    public void init() {

        System.out.println("Init..." + EventQueue.isDispatchThread());

        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                createGUI();
            }
        });

    }

    public void start() {

        System.out.println("Start..." + EventQueue.isDispatchThread());

    }

    public void createGUI() {

        URL documentBase = getDocumentBase();

        System.out.println(documentBase);
        System.out.println(getCodeBase());

//        file:.../build/TestApplet.html
//        file:.../build/classes/        
        Image image = getImage(documentBase, "MT-vol-6-STOP-image-Kogumiko-megatokyo-11434773-1559-1852.jpg");

        System.out.println("image = " + image);

        getContentPane().add(new GUIThing(image));
    }

    public class GUIThing extends JPanel {

        Image image;

        public GUIThing(Image i2) {
            image = i2;
        }

        public void paintComponent(Graphics g) {

            super.paintComponent(g);

            Graphics2D g2 = (Graphics2D) g;
            g2.drawImage(image, 0, 0, this);

            g2.setColor(Color.RED);
            g2.drawLine(0, 0, getWidth(), getHeight());

        }
    }

}

うわー、アプレットで遊んでから久しぶりです。コードベースを使用していたコードを、機能していると思われるドキュメントベースに変更しました。1559x1852ピクセルの画像を(ローカルで)ほとんどまたはまったく遅延なくロードしていました

HTMLファイルのアプレットタグも再確認してください。使っていた

<APPLET codebase="classes" code="stack/TestApplet.class" width=350 height=200></APPLET>

アプレットビューアを介して。コードベースはドキュメントベースとは異なることに注意してください!!

私の画像はHTMLファイルと同じ場所にありました

于 2012-07-25T20:30:31.030 に答える