[英]How to update/paint JProgressBar while Swing is loaded building the GUI
[英]Visible JProgressBar while initializing main GUI
我正在為我正在開發的項目構建一個相當復雜的GUI。 重要的是,它包含(除此之外)具有12個以上復雜GUI組件窗格的JTabbedPane
。
我正在嘗試做的是在我實例化這些窗格時創建一個JProgressBar
(創建和配置;做所有事情都不能實際顯示)。 實際上,我希望得到類似Eclipse啟動畫面的最終結果:
這是(更新為包含SplashScreen)偽代碼,我正在嘗試做什么:
ProgramManager:
private setupGUI() {
mainGUI = new MainGUI(); // only instantiates internal JFrame field
mainGUI.setup();
}
MainGUI:
public void setup() {
//create and configure progress bar
final SplashScreen ss = SplashScreen.getSplashScreen();
JProgressBar jpb = new JProgressBar(){
Graphics g = ss.createGraphics();
@Override
public void paint(Graphics pG) {
// TODO Auto-generated method stub
super.paint(g);
}
};
jpb.setValue(0);
setup1stTab();
//update Progress
setup2ndTab();
//update progress
etc....
ss.close();
}
如果這是不可能的,或者如果我只是錯了,請告訴我。 我環顧四周,看到有人提到了Threading / SwingWorker
,但是在搞亂了那個和Observer / Observable的東西后(不可否認只是一點點),我仍然無法弄明白。
要獲得類似於Eclipse splash的內容,請參閱java.awt.SplashScreen
。 一旦圖像在屏幕上,就可以調用SplashScreen.createGraphics()來獲取..
..a圖形上下文(作為Graphics2D對象)用於初始屏幕疊加圖像,允許您在初始屏幕上繪圖。
在上面繪制進度條。
假設在EDT(事件調度線程)中調用setup(),該代碼將起作用。
要在EDT中調用方法,請執行以下操作:
SwingUtilities.invokeLater(new Thread() {
@Override
public void run() {
setup();
}
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.