案例說明
展示兩種不同的程式啟動界面
案例過程
第一種
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0gTMx81dsQWZ4lmZf1GLlpXazVmcvwFciV2dsQXYtJ3bm9CX9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5yN2QTNxIWN4EmMzYjNjJDNzYzX3IjMwEjM5AzLcBTMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
代碼如下
package com.student.frame;
/**
* 系統啟動類
* @authorAdministrator
*/
//導入包
import javax.swing.*;
import java.awt.*;
import java.util.Timer;
import java.util.TimerTask;
//啟動主類繼承窗體父類并實作線程接口
public class Index extends JWindow implements Runnable {
private staticfinal long serialVersionUID = 1L;
// 建立進度條屬性
privateJProgressBar jpb;
// 定義一張圖檔标簽
private JLabeljl;
// 構造方法
public Index() {
init();
}
// 初始化方法
public voidinit() {
// 執行個體化圖檔标簽
jl = newJLabel(new ImageIcon("image/0.png"));
// 建立進度條
jpb = newJProgressBar();
// 設定進度條屬性
jpb.setStringPainted(true);//顯示目前進度值資訊
jpb.setIndeterminate(false);//确定進度條執行完成後不來復原動
jpb.setBorderPainted(false);//設定進度條邊框不顯示
jpb.setBackground(Color.pink);//設定進度條的背景色
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));//設定光标
// 設定布局添加元件
this.add(jl,BorderLayout.NORTH);
this.add(jpb,BorderLayout.SOUTH);
// 設定窗體屬性
this.setSize(384,292);//設定大小
this.setLocationRelativeTo(null);//設定劇中顯示
//下面兩句也可以設定居中顯示窗體
//Dimensionscreen = getToolkit().getScreenSize(); // 得到螢幕尺寸
//setLocation((screen.width- getSize().width) / 2, (screen.height - getSize().height) / 2); // 設定視窗位置
this.pack();// 視窗适應元件尺寸
this.setVisible(true);
}
// 設定線程方法
public void run(){
int[]progressValue = { 0, 1, 5, 8, 14, 17, 26, 35, 38, 43, 49, 56, 65, 71, 75, 78,86, 94, 98, 99, 100 };
for (int i =0; i < progressValue.length; i++) {
try {
// 休眠1秒,再執行
Thread.sleep(1000);
} catch(InterruptedException e) {
// TODOAuto-generated catch block
e.printStackTrace();
}
jpb.setValue(progressValue[i]);//取得數組中的進度值
}
while (true) {
try {
Thread.sleep(1000);
} catch(InterruptedException e) {
// TODOAuto-generated catch block
e.printStackTrace();
}
// 當進度完成後,執行相應的操作,如切換到其他的視窗,同時關閉進度條視窗等
newUserLogin();
// 關閉進度條視窗
this.dispose();
break;
}
}
// 啟動類主方法
public staticvoid main(String[] args) {
// new 一個類對象
Index i = newIndex();
// 定義線程
Thread t = newThread(i);
t.start();
}
}
第二種
import javax.swing.*;
import java.awt.*;
import java.net.*;
//程式啟動界面
public class JWindowDemo extends JWindow implementsRunnable {
ThreadsplashThread; // 進度條更新線程
JProgressBarprogress; // 進度條
publicJWindowDemo() {
Containercontainer = getContentPane(); // 得到容器
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));// 設定光标
URL url =getClass().getResource("login.jpg"); // 圖檔的位置
if (url !=null) {
container.add(new JLabel(new ImageIcon(url)),BorderLayout.CENTER); // 增加圖檔
}
progress = newJProgressBar(1, 100); // 執行個體化進度條
progress.setStringPainted(true);// 描繪文字
progress.setString("加載程式中,請稍候......");// 設定顯示文字
progress.setBackground(Color.white);// 設定背景色
container.add(progress,BorderLayout.SOUTH); // 增加進度條到容器上
Dimensionscreen = getToolkit().getScreenSize(); // 得到螢幕尺寸
pack(); // 視窗适應元件尺寸
setLocation((screen.width- getSize().width) / 2, (screen.height - getSize().height) / 2); // 設定視窗位置
}
public voidstart() {
this.toFront();// 視窗前端顯示
splashThread =new Thread(this); // 執行個體化線程
splashThread.start();// 開始運作線程
}
public void run(){
setVisible(true);// 顯示視窗
try {
for (int i =0; i < 100; i++) {
Thread.sleep(100);// 線程休眠
progress.setValue(progress.getValue()+ 1); // 設定進度條值
}
} catch(Exception ex) {
ex.printStackTrace();
}
dispose(); // 釋放視窗
//new MainFrame();運作主程式
}
public staticvoid main(String[] args) {
JWindowDemosplash = new JWindowDemo();
splash.start();// 運作啟動界面
}
}
案列總結
根據自己的喜好,放置不同的啟動圖檔即可!