プログラムで SplashScreen を作成し、それにテキストを追加 (および変更) する必要があります。ほとんどの例は、コマンド ライン パラメータで機能します。なしで機能するソリューションはありますか?
質問する
9594 次
2 に答える
7
に素材をロードしている間、背景画像とプログレスバーを備えた装飾されていないダイアログを使用できますSwingWorker
。完了したら、ダイアログを非表示にして、通常どおり UI を開始します。ダイアログ/スプラッシュスクリーンに追加されたコンポーネントは、背景画像を「見る」ために非不透明でなければなりません。
これが実際の例です:
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<Void, Integer> worker = new SwingWorker<Void, Integer>() {
@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<Integer> 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();
}
}
});
}
}
于 2013-04-29T22:36:02.653 に答える