本文将讲解如何做一个类似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进度条控件(转)相关推荐

  1. Java Swing创建自定义闪屏:在闪屏上添加Swing进度条控件(转)

    本文将讲解如何做一个类似MyEclipse启动画面的闪屏,为Java Swing应用程序增添魅力. 首先看一下效果图吧, 原理很简单,就是创建一个Dialog,Dialog有一个进度条和一个Label ...

  2. java string对象创建对象_Java String 创建了几个对象

    我们首先来看一段代码: Java代码 String str=new String("abc"); 紧接着这段代码之后的往往是这个问题,那就是这行代码究竟创建了几个String对象呢 ...

  3. java中写入文件_java中创建、写入文件的5种方式

    在java中有很多的方法可以创建文件写文件,你是否真的认真的总结过?下面笔者就帮大家总结一下java中创建文件的五种方法. Files.newBufferedWriter(Java 8) Files. ...

  4. java repaint 没反应_java - 为什么repaint()在我的JPanel上不起作用? - 堆栈内存溢出...

    我制作了自己的JPanel子类,称为SubPatternPanel . 我想在框架中使用它来绘制网格,但是当我从框架中为SubPatternPanel调用repaint() ,它不起作用. 运行时,框 ...

  5. Android 数据库(SQLite)【简介、创建、使用(增删改查、事务、实战演练)、数据显示控件(ListView、Adapter、实战演练-绿豆通讯录)】

    目   录 (壹)SQLite数据库简介 (贰)数据库的创建 (叁)数据库的使用 3.1.SQlite的基本操作 3.1.1.添加数据 3.1.2.修改数据 3.1.3.查询数据 3.1.4.删除数据 ...

  6. android绿豆通讯录xml,Android 数据库(SQLite)【简介、创建、使用(增删改查、事务、实战演练)、数据显示控件(ListView、Adapter、实战演练)】...

    目   录 (壹)SQLite数据库简介 (贰)数据库的创建 (叁)数据库的使用 3.1.SQlite的基本操作 3.1.1.添加数据 3.1.2.修改数据 3.1.3.查询数据 3.1.4.删除数据 ...

  7. 树莓派java 控制摄像头_【树莓派】使用JavaCV1.5.2调用摄像头,自写的摄像头控件...

    已更新JavaCV1.5.3版本:https://blog.csdn.net/ap114/article/details/105531743 做毕设要用到摄像头,可是树莓派上的摄像头就那么几种,jmf ...

  8. 可以创建专业的客户端/服务器视频会议应用程序的音频和视频控件LEADTOOLS Video Conferencing SDK...

    LEADTOOLS Video Streaming Module控件为您创建一个自定义的视频会议应用程序和工具提供所有需要的功能.软件开发人员可以使用Video Streaming Module SD ...

  9. 自定义view学习-手把手教你制作一个可扩展日历控件

    来看看效果图先,手把手教你实现一个简易,但高扩展度的日历控件,可自由扩展成签到,单选,多选日期. 首先我们来分析实现思路.对于上图的效果,很明显是一个6x7的表格. 我们可以两个for循环控制绘制每个 ...

最新文章

  1. AI赋能,让无人系统更智能
  2. JDK 与 JRE区别
  3. Linux下查看显卡PCIE速率x16x8x4及设定
  4. Android 字体ttf文件下载(含github下载地址)
  5. Git 修改历史提交中的用户名和邮箱
  6. Fatal error: Out of memory (allocated 2252140544) (tried to allocate 67108864 bytes)
  7. java中String转Long类型
  8. 《建筑工程定额与预算》
  9. httprunner-2-linux下搭建hrun(下)
  10. English Learning - Day22 作业打卡 2022.12.28 周三
  11. 使用swagger api 下载excel,excel打不开
  12. 读书笔记 - 《格鲁夫给经理人的第一课》
  13. 无法进入网页版小木虫
  14. Android 客户端Socket 与 Java服务端ServerSocket
  15. winform抓取淘宝宝贝详细页的上下架时间等信息
  16. 【soft6星评论】站在5G时代的入口,我们看到了“智慧交通”的含苞待放
  17. 强大的UI组件集Telerik R3 2022支持.NET 7、全新的主题等
  18. 12v电源正负极区分_直流12v电源线圆形插头正负极怎么认
  19. php 模拟微信账号登录
  20. 2021年最受欢迎的10款开源DevOps工具

热门文章

  1. linux无法访问443端口,linux – 为什么我无法在Ubuntu上ping端口443?
  2. xamarin怎么调用java的_XamarinSQLite教程在Xamarin.Android项目中使用数据库
  3. 小米机器人清理主刷和轴承_扫地机主刷怎样更换
  4. 在vivado里用rtl描述_如何利用Vivado HLS处理许多位准确或任意精度数据类型
  5. Scrapy 框架【学习笔记01】
  6. 堆和栈的区别(经典干货)
  7. QT串口编程的相关类(QSerialPortInfo)
  8. 最近在ST公司的STxp70的dsp平台上开发音频codec模块.
  9. HttpClient中转上传文件
  10. Redis Java调用