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 回答