0

アプレットが読み込まれる前にテキストを表示するようにしようとしているので、単純な SSCCE(.org) を作成しました。

import java.awt.*;
import javax.swing.*;

    public class test extends JApplet {
      public void init() {

                this.add(new JLabel("Button 1"));
                System.out.println("Hello world...");


                try {
                Thread.sleep(3000);
                }catch(Exception hapa) { hapa.printStackTrace(); }


      }
    }

それを実行すると、ボタン 1 が 3 秒後に表示されますが、その前に表示されるはずです...何が間違っていますか?

4

2 に答える 2

2

init()アイテムがレンダリングされる前に、メソッドが返される必要があると思います。

于 2011-05-13T02:21:26.503 に答える
1

JustinKSU が質問の技術的な部分をカバーしました。

を使用してimage param、アプレットが表示される前に「スプラッシュ」を表示することをお勧めします。詳細については、アプレットの特別な属性を参照してください。

ロードだけでなく、一定の時間だけ欲しいです。

その場合CardLayoutは、アプレットに a を入れてください。「スプラッシュ」を最初のカードに追加し、残りの GUI を別のカードに追加します。最後に、メイン GUI を使用してカードにフリップするinit()繰り返しのない Swing を作成します。Timer

例えば

// <applet code='SplashApplet' width='400' height='400'></applet>
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class SplashApplet extends JApplet {

    public void init() {
        final CardLayout cardLayout = new CardLayout();
        final JPanel gui = new JPanel(cardLayout);

        JPanel splash = new JPanel();
        splash.setBackground(Color.RED);
        gui.add(splash, "splash");

        JPanel mainGui = new JPanel();
        mainGui.setBackground(Color.GREEN);
        gui.add(mainGui, "main");

        ActionListener listener = new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
                cardLayout.show(gui, "main");
            }
        };

        Timer timer = new Timer(3000, listener);
        // only needs to be done once
        timer.setRepeats(false);
        setContentPane(gui);
        validate();
        timer.start();
    }
}
于 2011-05-13T02:48:19.937 に答える