日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java闪屏怎么制作,Java Swing创建自定义闪屏:在闪屏下画进度条(一)

發布時間:2024/9/19 java 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java闪屏怎么制作,Java Swing创建自定义闪屏:在闪屏下画进度条(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Java Swing創建自定義閃屏:在閃屏上畫進度條(一)

由于本人十分熱愛Java Swing,所以平時閑暇之余總是喜歡極盡所能去搜藏一些自認為比較“酷”的Swing代碼來研究揣摩。昨天的兩篇文章,介紹了Java Swing透明和不規則窗體的創建和原理,是一年半以前我還在學校的時候搞出來的。在學校的日子因為輕松、自由、專注,所以總是讓人倍加懷念。這一懷念不打緊,讓我翻出了以前寫的N多“爛”代碼,好在時至今日我還能勉強看懂,花了一個上午的時間整理了一下,現在跟大家分享一個分別模仿NetBeans和MyEclipse啟動畫面的Java Swing閃屏制作技巧。

用過NetBeans和MyEclipse的童鞋,對它們的啟動畫面(也叫閃屏,下文所述如不加以說明,都是指閃屏)肯定都非常熟悉了,它們在啟動的時候,向啟動畫面輸出當前初始化的進度信息:包括文字信息和進度條信息。當然他們也有細微的不同之處,仔細觀察就能發現,NetBeans的進度條似乎太不“專業”,隨便在閃屏上畫個矩形,然后對部分區域以紅色填充以代表進度;相反,MyEclipse則要好多了,“閃屏”上出現的是一個標準的進度條控件。二者優劣無法評斷,也不是本文的主題所在,這里本人將以兩篇文章的篇幅分別介紹如何實現NetBeans式的閃屏和MyEclipse式的閃屏。

本文將從原理到代碼,詳細介紹如何實現NetBeans的閃屏。

原理:Swing程序啟動后,虛擬機會根據指定的圖片生成一個SplashScreen,在Swing窗體顯示之前出現在屏幕的中央,以告知用戶,程序已經在很努力的加載了。在程序中,我們可以通過SplashScreen.getSplashScreen()得到這個閃屏對象,然后,通過該對象我們又可以得到閃屏的圖形對象(Graphics2D對象)。得到這個對象以后,相信接下來不用多說,很多人都知道該如何借助這個Graphics2D對象,在閃屏上畫出來各種各樣的“東西”而不僅僅限于提示字符和模擬的進度條了。

看一下效果圖

最上面的那一行字符串,是加載進度提示信息,最下面的紅色區域是模擬出來的進度條。當然啦,他們的位置、形狀、顏色都是可以定制的。

好了,貼上代碼吧:

/*

* To change this template, choose Tools | Templates

* and open the template in the editor.

*/

package cn.ysh.studio.gui.window;

import java.awt.AlphaComposite;

import java.awt.Color;

import java.awt.Graphics2D;

import java.awt.Rectangle;

import java.awt.SplashScreen;

import javax.swing.UIManager;

/**

*

* @author 楊勝寒

*/

public class Splash {

//在這兒你能獲得通過-splash:設置給程序的splash screen的實例

private final SplashScreen splash = SplashScreen.getSplashScreen();

private Rectangle splashBounds;

private Graphics2D splashGraphics;

/**

* 初始化splash

*/

protected void initSplash() {

if (splash != null) {

//下面給splash screen畫一個邊框

splashBounds = splash.getBounds();

//在這兒初始化圖形對象,該圖形對象取自splash

splashGraphics = (Graphics2D) splash.createGraphics();

if (splashGraphics != null) {

splashGraphics.setColor(Color.BLUE);

splashGraphics.drawRect(0, 0, splashBounds.width - 1, splashBounds.height - 1);

}

}

}

/**

* 更新splash,這個方法

*/

protected void updateSplash(String status, int progress) {

if (splash == null || splashGraphics == null) {

return;

}

//重畫splash上面的進度并通知splash更新界面

drawSplash(splashGraphics, status, progress);

splash.update();

}

/**

* 這個方法畫一個進度條,不再詳述。

*/

protected void drawSplash(Graphics2D splashGraphics, String status, int progress) {

int barWidth = splashBounds.width;//進度條長度

splashGraphics.setComposite(AlphaComposite.Clear);

splashGraphics.fillRect(1, 10, splashBounds.width - 2, 20);//閃屏邊框

splashGraphics.setPaintMode();//模型

splashGraphics.setColor(Color.ORANGE);//字符串顏色

splashGraphics.drawString(status, 10, 20);//畫字符串

splashGraphics.setColor(Color.red);//進 度條填充顏色

int width = progress * barWidth / 100;//進度條當前值

splashGraphics.fillRect(0, splashBounds.height - 20, width, 6);

}

/**

* 這兒是加載程序的過程

*/

protected void loadApplication() {

//初始化splash

initSplash();

//模擬的加載進度提示信息

final String[] stages = {"正在啟動", "正在讀取數據", "正在加載相關文檔", "啟動完成"};

int stage = 0;

//在下面你初始化程序的過程中調用updateSplash來更新splash

for (int i = 0; i <= 100; i += 1) {

String status = stages[stage];

if (splash != null) {

//更新閃屏圖像

updateSplash(status, i);

}

if (i == 30) {

stage = 1;

} else if (i == 70) {

stage = 2;

} else if (i == 90) {

stage = 3;

}

try {

//故意等待

Thread.sleep(20);

} catch (Exception e) {

//異常不做處理

}

}

try {

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

} catch (Exception e) {

}

MainWindow window = new MainWindow();

//在這兒你可以主動關閉splash

if (splash != null) {

splash.close();

}

//真正開始的你的登錄界面或者主窗口

window.setVisible(true);

}

public static void main(String args[]) {

new Splash().loadApplication();

}

}

順便提一下,在Java Swing應用程序中指定閃屏很簡單,只需在jar文件的META-INF文件夾下的MANIFEST.MF文件的

Main-Class: cn.ysh.studio.gui.window.Splash上面加這么一行SplashScreen-Image: META-INF/splash.jpg就可以了,系統啟動時將以此圖片生成閃屏。該圖片必須位于jar包中,路徑為包名+文件名。

原創文章,轉載請注明出處:http://yshjava.iteye.com/blog/1326450

總結

以上是生活随笔為你收集整理的java闪屏怎么制作,Java Swing创建自定义闪屏:在闪屏下画进度条(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。