java swing进度条_Java Swing创建自定义闪屏:在闪屏上添加Swing进度条控件(转)

本文将讲解如何做一个类似MyEclipse启动画面的闪屏,为Java Swing应用程序增添魅力。

首先看一下效果图吧,

163fe0ca751d1bba7f93bc0617fed525.png

原理很简单,就是创建一个Dialog,Dialog有一个进度条和一个Label用来分别显示进度和进度信息,而Dialog的宽度和高度正是闪屏图片的宽度和高度。然后将闪屏图片贴到Dialog中作为整个窗体的背景,Dialog显示时覆盖闪屏所处的区域。由于Dialog显示时闪屏并没有消失,且Dialog的X、Y及宽高都与闪屏图片一致,因此实际切换时,非常流畅,用户感觉不到有异常,就像从闪屏上“长”了两个Java Swing控件出来一样,非常自然。

看一下代码调用:

Java代码c7f30e22ed1ddf9b7bc28cc1fb8c85eb.png

/*

* 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代码c7f30e22ed1ddf9b7bc28cc1fb8c85eb.png

/*

* 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://www.mzph.cn/news/470034.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java excel 模板 替换_JAVA POI替换EXCEL模板中自定义标签(XLSX版本)满足替换多个SHEET中自定义标签...

个人说明:为了简单实现导出数据较少的EXCEL(根据自定义书签模板)一、替换Excel表格标签方法/*** 替换Excel模板文件内容* param map* 需要替换的标签建筑队形式* param intPath* Excel模板文件路径* param outPath* Excel生成文件路径*/public static boolean repla…

【JZOJ4817】【NOIP2016提高A组五校联考4】square

题目描述 输入 输出 样例输入 3 4 1 1 0 1 0 1 1 0 0 1 1 0 5 1 1 2 3 2 1 3 2 3 2 3 4 1 1 3 4 1 2 3 4 样例输出 1 1 1 2 2 数据范围 解法 设f[i][j]为以(i,j)为右下角的正方形的最大边长。 则f[i][j]min(f[i−1][j],f[i−1][j−1],f[i][j−1])1(a[i][j]1) 考虑…

java单例模式 uml_Java设计模式系列之单例模式

单例模式的定义一个类有且仅有一个实例,并且自行实例化向整个系统提供。比如,多程序读取一个配置文件时,建议配置文件时,建议配置文件封装成对象。会方便操作其中的数据,又要保证多个程序读到的是同一个配置文件对象&a…

Linux安全基础:grep命令的使用

grep (缩写来自Globally search a Regular Expression and Print)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。Unix的grep家族包括grep、egrep和fgrep。 grep的工作方式是这样的,它在…

oschina mysql limit_Mysql中limit的用法

Mysql中limit的用法:在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据,这个时候怎么办呢?不用担心,mysql已经为我们提供了这样一个功能。SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offsetLIMIT 子句…

centos yum “The requested URL returned error: 404”错误

CentOS-Base.repo里面变量不能被引用。直接修改CentOS-Base.repo修改baseurl这一行的变量即可, [rootbogon yum.repos.d]# yum makecache 转载于:https://www.cnblogs.com/bulvlanshan/p/5952155.html

php面试题2018mysql_PHP程序员必会的MySQL面试题

01数据库字段类型MySQL常见的数据类型有哪些?MySQL数据类型分为数值类型、日期时间型和字符串类型。数值类型常见的是TINYINT、INT、DECIMAL,日期类型常见的有DATE、DATETIME,字符串类型常见的有CHAR、VARCHAR、TEXT。详细介绍见文章末尾的图…

html5移动端制作知识点总结

一、测试工具:1.Chrome 2.Opera Mobile二、分辨率:一般现代手机最小320px,最大640px。三、全屏流体设计: 1.腾讯新闻:http://xw.qq.com/ 2.途牛旅游:http://m.tuniu.com/ 固屏类流体设计 1.京东商城&#x…

python counter模块_python collections模块 计数器(counter)

一、计数器(counter)Counter是对字典类型的补充,用于追踪值的出现次数。ps:具备字典的所有功能 自己的功能把我写入的元素出现的多少次都计算出来import collections# 创建一个Counter对象obj collections.Counter(ddccbbqqaaa)print(obj)把我写入的元…

C#-类-string/Manth/Random/DateTime-及练习

类一、string类:.Length 字符串的长度 .Trim() 去掉开头以及结尾的空格.TrimStart() 去掉开头的空格.TrimEnd() 去掉结尾的空格 .ToLower() 全部转换为小写.ToUpper() 全部转换为大写 .Substring(m,n) 从m位开始截取n长度的字符串.Substring(m) 从m位开始截取至字符…

【开发软件】推荐一款MAC OS X 下php集成开发环境mamp

这里给大家推荐一款在mac上搭建WEB服务器环境的集成环境安装软件,非常的好用,需要的朋友可以拿去,不用谢 ^_^之前苦于mac上搭建本地服务器之艰辛,找寻好久都没找到一款类似windows上集成的本地服务器环境,诸如phpstudy…

java操作日志记录_通用日志记录(java)

/*** 统一日志处理Handler*authorMingchenchen**/public classLogAopHandler {AutowiredprivateAuditLogDao auditLogDao;/*** controller层面记录操作日志* 注意此处是aop:around的 因为需要得到请求前的参数以及请求后接口返回的结果*throwsThrowable*/public Object doSaveL…

python数据类型-----字典

今天来总结下python3.4版本字典的一些操作方法。 字典是Python里面一种无序存储结构,存储的是键值对 key - value。关键字应该为不可变类型,如字符串、整数、包含不可变对象的元组。字典的创建很简单,用 d {key1 : value2, key2 : value2}的…

getmodifiers java_java – getModifiers()方法如何计算多个修饰符的值?

TL; DR:它将它们组合在一起形成bit field.要理解这一点,你需要了解二进制如何工作,这类似于十进制 – 让我们从那里开始:1 - public10 - static100 - final那么,101意味着什么?它必须是公共最终的,因为除了单个100和单个1之外,十进制系统中没…

克劳塞维茨与战争论

1. 基本战略 战争是政治的延续; 战争是死亡的盛筵;战争的目的就是消灭敌人;战略包括精神、物质、数学、地理、统计五大要素。战略战术的基本原则。克劳塞维茨认为,数量上的优势在战略战术上都是最普遍的制胜因素。虽然在实际作战时…

促销 java_原始促销 [Java]

JLS在这里不会“提升到更大的数据类型”,因为它不会为转移运算符执行二进制数字提升.这由JLS, Section 15.19涵盖.Unary numeric promotion (5.6.1) is performed on each operand separately. (Binary numeric promotion (5.6.2) is not performed on the operands.)一元数字促…

js基础一

## js三种引入方式&#xff08;内嵌&#xff08;用得少&#xff09;、内联、外联&#xff09;1、内联&#xff1a;&#xff08;写在head标签里&#xff09;<script type"text/javascript"> console.log("hello world");</script>2、外联&#…

java 2分钟_java开发中的那些事(5)--------一点经历,败给2分钟的2个小时

特意记下这个经历&#xff0c;这个让我感慨万千又斗志昂扬的一次经历&#xff0c;这是经验&#xff0c;也是生活。故事的始末是这种&#xff0c;先给大家上几句代码&#xff0c;如今身在家中&#xff0c;仅仅能凭记忆敲打几行&#xff0c;大致意思倒不会错&#xff1a;{field:c…

用户登录和注册的功能

<form action"logincheck.php" method"post"> 用户名&#xff1a;<input type"text" name"username" /> <br /> 密码&#xff1a;<input type"password" name"password" /&g…

java cygwin 乱码_windows10乱码怎么解决

如 图组360没有乱码 但字体明显不对字体不正常更明显了第三方浏览器要么乱码 要么根本打不开安装java时也是乱码 要不是我安装过 我根本不知道按钮在哪里eclipse也逃脱不了显示错误的命运(ps:第一行代码 或是说注释)酷狗音乐就更惨了这是cmd命令执行 dir /?时得到的帮助信息 我…