Bestes Beispiel für die programmatische Erstellung von SplashScreen mit Text

Ich muss einen SplashScreen programmgesteuert erstellen und Text hinzufügen (und ändern). Die meisten Beispiele funktionieren mit den Befehlszeilenparametern. Gibt es Lösungen ohne?

Sie können einen undekorierten Dialog mit einem Hintergrundbild und einem Fortschrittsbalken verwenden, während Sie SwingWorker in einem SwingWorker . Wenn Sie fertig sind, blenden Sie den Dialog aus und starten Sie die Benutzeroberfläche wie gewohnt. Komponenten, die dem Dialog / Startbildschirm hinzugefügt werden, müssen nicht undurchsichtig sein, um das Hintergrundbild zu “sehen”.

Hier ist ein Arbeitsbeispiel:

Bildbeschreibung hier eingeben

 import java.awt.BorderLayout; import java.awt.Color; import java.awt.Frame; import java.net.MalformedURLException; import java.net.URL; import java.util.List; import javax.swing.BorderFactory; import javax.swing.ImageIcon; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JProgressBar; import javax.swing.SwingUtilities; import javax.swing.SwingWorker; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; public class TestSplashScreen { private JDialog dialog; private JFrame frame; private JProgressBar progress; protected void initUI() throws MalformedURLException { showSplashScreen(); SwingWorker worker = new SwingWorker() { @Override protected Void doInBackground() throws Exception { for (int i = 0; i < 100; i++) { Thread.sleep(100);// Simulate loading publish(i);// Notify progress } return null; } @Override protected void process(List chunks) { progress.setValue(chunks.get(chunks.size() - 1)); } @Override protected void done() { showFrame(); hideSplashScreen(); } }; worker.execute(); } protected void hideSplashScreen() { dialog.setVisible(false); dialog.dispose(); } protected void showSplashScreen() throws MalformedURLException { dialog = new JDialog((Frame) null); dialog.setModal(false); dialog.setUndecorated(true); JLabel background = new JLabel(new ImageIcon(new URL("http://blogs.dirteam.com/photos/sanderberkouwer/images/2157/original.aspx"))); background.setLayout(new BorderLayout()); dialog.add(background); JLabel text = new JLabel("Loading, please wait..."); text.setForeground(Color.WHITE); text.setBorder(BorderFactory.createEmptyBorder(100, 50, 100, 50)); background.add(text); progress = new JProgressBar(); background.add(progress, BorderLayout.SOUTH); dialog.pack(); dialog.setLocationRelativeTo(null); dialog.setVisible(true); } protected void showFrame() { frame = new JFrame(TestSplashScreen.class.getSimpleName()); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JLabel ui = new JLabel("UI loaded and ready"); ui.setBorder(BorderFactory.createEmptyBorder(300, 300, 300, 300)); frame.add(ui); frame.pack(); frame.setVisible(true); } public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, UnsupportedLookAndFeelException { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); SwingUtilities.invokeLater(new Runnable() { @Override public void run() { try { new TestSplashScreen().initUI(); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }); } } 

Eine Alternative ist die Verwendung der SplashScreen API. Weitere Informationen finden Sie unter Erstellen eines Begrüßungsbildschirms .

Ich muss einen SplashScreen programmgesteuert erstellen und Text hinzufügen (und ändern).

Rufen Sie SplashScreen.createGraphics() und malen Sie nach Bedarf.