java swing进度条_Java Swing创建自定义闪屏:在闪屏上添加Swing进度条控件(转)
本文將講解如何做一個類似MyEclipse啟動畫面的閃屏,為Java Swing應用程序增添魅力。
首先看一下效果圖吧,
原理很簡單,就是創建一個Dialog,Dialog有一個進度條和一個Label用來分別顯示進度和進度信息,而Dialog的寬度和高度正是閃屏圖片的寬度和高度。然后將閃屏圖片貼到Dialog中作為整個窗體的背景,Dialog顯示時覆蓋閃屏所處的區域。由于Dialog顯示時閃屏并沒有消失,且Dialog的X、Y及寬高都與閃屏圖片一致,因此實際切換時,非常流暢,用戶感覺不到有異常,就像從閃屏上“長”了兩個Java Swing控件出來一樣,非常自然。
看一下代碼調用:
Java代碼
/*
*?To?change?this?template,?choose?Tools?|?Templates
*?and?open?the?template?in?the?editor.
*/
package?cn.ysh.studio.gui.window;
import?javax.swing.JFrame;
import?javax.swing.UIManager;
/**
*
*?@author?楊勝寒
*/
public?class?SplashProcess?{
public?static?void?main(String?args[])?{
try?{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}?catch?(Exception?e)?{
}
//初始化閃屏Dialog時指定閃屏圖片
final?BackgroundDialog?splashWindow?=?new?BackgroundDialog("/cn/ysh/studio/gui/resources/splash.jpg");
//啟動一個線程來加載數據
new?Thread()?{
@Override
public?void?run()?{
try?{
for?(int?i?=?0;?i?
splashWindow.updateProcess("正在進行第"?+?i?+?"次緩存數據加載.?.?.",?i?*?9);
Thread.sleep(300);
}
}?catch?(InterruptedException?ex)?{
//異常不做處理
}
JFrame?window?=?new?MainWindow();
splashWindow.updateProcess("正在啟動主窗體.?.?.",?100);
SwingUtils.moveToScreenCenter(window);
splashWindow.setVisible(false);
//數據加載完成,顯示主窗體
window.setVisible(true);
//釋放資源
splashWindow.dispose();
}
}.start();
//顯示閃屏Dialog
splashWindow.setVisible(true);
}
}
上述代碼分四部分, 一、設置Java Swing外觀風格; 二、創建一個閃屏Dialog; 三、啟動一個加載數據的線程; 四、顯示閃屏Dialog
下面看看閃屏Dialog BackgroundDialog的代碼
Java代碼
/*
*?To?change?this?template,?choose?Tools?|?Templates
*?and?open?the?template?in?the?editor.
*/
package?cn.ysh.studio.gui.window;
import?javax.swing.GroupLayout;
import?javax.swing.ImageIcon;
import?javax.swing.JDialog;
import?javax.swing.JFrame;
import?javax.swing.JLabel;
import?javax.swing.JPanel;
import?javax.swing.JProgressBar;
import?javax.swing.LayoutStyle;
/**
*
*?@author?楊勝寒
*/
public?class?BackgroundDialog?extends?JDialog?{
private?ImageIcon?background;
private?JProgressBar?progressBar;
private?JLabel?progressInfo;
public?BackgroundDialog(String?splashPath)?{
super(new?JFrame(),?true);
//鼠標形狀為等待,告知用戶程序已經在很努力的加載了,此時不可操作
setCursor(new?java.awt.Cursor(java.awt.Cursor.WAIT_CURSOR));
//背景圖片
background?=?new?ImageIcon(BackgroundDialog.class.getResource(splashPath));
JLabel?label?=?new?JLabel(background);//?把背景圖片顯示在一個標簽里面
//把標簽的大小位置設置為圖片剛好填充整個面板
label.setBounds(0,?0,?background.getIconWidth(),?background.getIconHeight());
//把內容窗格轉化為JPanel,否則不能用方法setOpaque()來使內容窗格透明
((JPanel)?getContentPane()).setOpaque(false);
//初始化窗體布局
initUI();
//取消窗體默認裝飾
this.setUndecorated(true);
//把背景圖片添加到分層窗格的最底層作為背景
getLayeredPane().add(label,?new?Integer(Integer.MIN_VALUE));
setSize(background.getIconWidth(),?background.getIconHeight());
//移至屏幕中央,覆蓋閃屏區域
SwingUtils.moveToScreenCenter(this);
}
/**
*?初始化窗體UI,可以在這個方法中創建復雜的UI布局
*/
private?void?initUI()?{
progressBar?=?new?JProgressBar();
progressInfo?=?new?JLabel();
progressInfo.setText("?");
progressInfo.setForeground(new?java.awt.Color(204,?0,?204));
GroupLayout?layout?=?new?GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(GroupLayout.Alignment.LEADING).addComponent(progressBar,?GroupLayout.Alignment.TRAILING,?GroupLayout.DEFAULT_SIZE,?410,?Short.MAX_VALUE).addComponent(progressInfo,?GroupLayout.Alignment.TRAILING,?GroupLayout.DEFAULT_SIZE,?410,?Short.MAX_VALUE));
layout.setVerticalGroup(
layout.createParallelGroup(GroupLayout.Alignment.LEADING).addGroup(GroupLayout.Alignment.TRAILING,?layout.createSequentialGroup().addContainerGap(265,?Short.MAX_VALUE).addComponent(progressInfo,?GroupLayout.PREFERRED_SIZE,?15,?GroupLayout.PREFERRED_SIZE).addPreferredGap(LayoutStyle.ComponentPlacement.RELATED).addComponent(progressBar,?GroupLayout.PREFERRED_SIZE,?GroupLayout.DEFAULT_SIZE,?GroupLayout.PREFERRED_SIZE)));
}
public?void?updateProcess(String?info,?int?value)?{
progressInfo.setText(info);
progressBar.setValue(value);
}
}
注釋寫的很清楚,不再贅述,且BackgroundDialog支持更復雜和更有創意的界面設計,比如動畫等特效,在initUI方法中實現即可。
總結
以上是生活随笔為你收集整理的java swing进度条_Java Swing创建自定义闪屏:在闪屏上添加Swing进度条控件(转)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python或anaconda下安装op
- 下一篇: python counter模块_pyt