我需要以編程方式創建SplashScreen並向其添加文本(並對其進行更改)。 大多數示例都使用命令行參數。 有沒有解決方案工作?以文本方式編程創建SplashScreen的最佳示例
2
A
回答
7
在加載SwingWorker
中的東西時,可以使用帶有背景圖像和進度條的未修飾對話框。完成後,隱藏對話框並像往常一樣啓動UI。添加到dialog/splashcreen的組件必須是非透明的,才能「看見」背景圖像。
這裏是一個工作示例:
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();
}
}
});
}
}
4
一種替代方法是使用SplashScreen
API。詳情請參閱How to Create a Splash Screen。
我需要以編程方式創建一個閃屏和文本添加到它(和修改)。
請致電SplashScreen.createGraphics()
並根據需要塗漆。
+0
標記爲解決方案的答案在JDialog中效果更好。但都工作;-)另外你推薦的解決方案需要一個splashscreen設置爲控制檯參數或清單文件(似乎是這樣)。 – 2013-05-01 18:31:14
相關問題
- 1. 以編程方式創建/編輯模板的最佳方法
- 2. 以編程方式創建圖像的最佳方式
- 3. 以編程方式創建佈局的最佳方式的提示
- 4. 以編程方式創建撥號圖像的最佳方法?
- 5. 以編程方式創建firbase實例
- 6. 使用實例方法創建示波器的最佳方式
- 7. 以編程方式創建pdf的示例代碼
- 8. 以編程方式創建「版本」
- 9. 以編程方式創建Apple腳本
- 10. 如何以編程方式創建ecore文件的實例
- 11. 使用Python自動創建例程的最佳方式
- 12. 以編程方式創建ZIP文件
- 13. 以編程方式創建.pfx文件
- 14. 以編程方式創建.edmx文件
- 15. 以編程方式創建.xls文件
- 16. 以編程方式創建designer.cs文件
- 17. 最佳方式編程
- 18. 以編程方式創建UItextfield,以後如何獲取文本?
- 19. 鎖定文件創建的最佳方式(最佳性能)
- 20. 設置以編程方式創建的按鈕的文本
- 21. 以編程方式獲得信用評分(例如FICO)的最佳方式
- 22. 以編程方式在客戶端創建文本文件
- 23. 如何以編程方式創建基本的Adobe Illustrator文件?
- 24. 以下哪一項是創建文件的最佳方式?
- 25. 以正確的方向以編程方式顯示UIView的最佳做法
- 26. 什麼是以編程方式使用Gmail的最佳方式?
- 27. 在asp.net中以編程方式創建PowerPoint演示文稿
- 28. 以編程方式檢查shell腳本中失敗的scp的最佳方式
- 29. 以編程方式顯示Highstocks圖例
- 30. 以編程方式創建流程圖
太好了,謝謝。因此,未修飾的對話框是自定義閃屏的唯一選項? – 2013-04-30 06:50:49
@DanielRuf你也可以使用'JWindow'而不是'JDialog',但它看起來是一樣的(它可以節省2行代碼)。有沒有其他的選擇?_也許,但到目前爲止,我想出了上述的一個,這看起來很不錯。 – 2013-04-30 07:03:37