本文将讲解如何做一个类似MyEclipse启动画面的闪屏,为Java Swing应用程序增添魅力。
首先看一下效果图吧,
原理很简单,就是创建一个Dialog,Dialog有一个进度条和一个Label用来分别显示进度和进度信息,而Dialog的宽度和高度正是闪屏图片的宽度和高度。然后将闪屏图片贴到Dialog中作为整个窗体的背景,Dialog显示时覆盖闪屏所处的区域。由于Dialog显示时闪屏并没有消失,且Dialog的X、Y及宽高都与闪屏图片一致,因此实际切换时,非常流畅,用户感觉不到有异常,就像从闪屏上“长”了两个Java Swing控件出来一样,非常自然。
看一下代码调用:
/*
* 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 < 10; 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的代码
/*
* 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方法中实现即可。
原创文章,转载请注明出处: http://yshjava.iteye.com/blog/1326539
- 大小: 50 KB
分享到:
相关推荐
自定义闪屏页广告倒计时view
如何在Java程序前添加一个闪屏,Java添加闪屏 jar添加闪屏
AppVeyor 特拉维斯CI科尔多瓦插件闪屏在您的Web应用程序启动时,此插件显示和隐藏启动屏幕。 使用其方法,您还可以手动显示和隐藏启动屏幕。安装// npm hosted (new) idcordova plugin add cordova-plugin-splash...
自定义Unity闪屏ForAndroid-附件资源
主要介绍了Android 自定义闪屏页广告倒计时view效果,需要的朋友可以参考下
在登录页面开启闪屏效果,可以根据主页面的载入数据的进度在闪屏上显示相应的文字
韩顺平 java 教程 满汉楼实例 闪屏的实现,自己慢慢拷贝的,已经测试通过,分享一下,后期会慢慢开发出完整版,求收藏
闪屏添加器
java界面开发,做出一个闪屏类,字体和背景可以自己添加,其他参数也可以自己看着修改一下。保证可以使用哦
MFC基础开发学习,想在程序启动时运用进度条的,可以参考下吧。
winform窗体内如果控件太多,在新建窗体活窗体刷新时,都会各种闪屏,网上百度,各种开缓存,实际并未说明白
闪屏添加器 (Splasher) 绿色美化版 这是一个可以给EXE文件添加闪屏的小工具。 只有一个单文件。 该工具操作极其简单、丝毫不会编程的朋友也可以随意给自己喜爱的EXE文件添加闪屏!
闪屏添加器是一个给程序加弹窗图片的工具。弹出窗口可以控制在启动或结束时。 这个是我用原版重新汉化,绿色版。
C/S 设备界面:启动闪屏窗体 设备界面:设置闪屏窗体
在wpf中创建一个指定延迟的闪屏
这是一个闪屏控件,可用于显示各种版本信息,用来美化界面,是一个很实用的东西,本人经常使用
本书包含有关StAX API、JDBC 4、编译器API、脚本框架、闪屏和托盘API以及其他许多Java SE6改进特性的新章节。本书聚焦于Java语言中更高级的特性,包括下列内容:流与文件、网络、数据库编程、XML、JNDI与LDAP、国际...
Android 实现闪屏页+功能引导页