Java Splash screen - PullRequest
       15

Java Splash screen

0 голосов
/ 13 мая 2011

Я пытаюсь сделать так, чтобы какой-то текст появлялся до загрузки моего апплета, поэтому я сделал простой 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 секунд, когда должно появиться ДО этого ... что я делаю не так?

Ответы [ 2 ]

2 голосов
/ 13 мая 2011

Я думаю, что метод init() должен вернуться до того, как элементы будут отрисованы.

1 голос
/ 13 мая 2011

JustinKSU рассмотрел техническую часть вопроса.

Лучшей стратегией было бы использование image param для отображения «всплеска» до появления апплета.См. Специальные атрибуты апплетов для получения дополнительной информации.

Я хочу один на фиксированный промежуток времени ... не только загрузка.

В этом случае поместите CardLayout в апплет.Добавьте «всплеск» на первую карту, остальную часть графического интерфейса на другую.В конце init() создайте неповторяющийся Swing Timer, который будет переворачиваться на карту с основным графическим интерфейсом.

EG

// <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();
    }
}
...