`
杨胜寒
  • 浏览: 286196 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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

阅读更多

本文将讲解如何做一个类似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
1
0
分享到:
评论

相关推荐

    自定义闪屏页广告倒计时view

    自定义闪屏页广告倒计时view

    在Java程序前添加一个闪屏

    在Java程序中添加一个闪屏(Splash Screen)是提高用户体验的一种常见方法,它可以在应用程序启动时展示一个带有品牌标识或加载进度的短暂画面,让用户感知到程序正在准备运行。下面我们将详细探讨如何在Java程序中...

    MFC开发闪屏进度条

    6. 对于进度条,你需要在对话框资源中添加一个进度条控件,然后在代码中创建一个CProgressCtrl对象,与控件关联。在需要更新进度的地方调用SetPos()。 7. 为了测试和调试,你可以创建两个不同的编译配置,如...

    用于提示版本信息的闪屏控件

    这可能包括XML布局文件、Java或Kotlin类、图片资源等,通过这些组件,开发者可以了解到如何集成和自定义闪屏控件。 总的来说,闪屏控件是提升应用用户体验的重要组成部分,正确地设计和实现它可以为应用带来良好的...

    java闪屏类

    3. **自定义组件**:为了更好地控制闪屏类的行为,我们可以创建一个继承自`Component`或`JComponent`的自定义类,重写`paintComponent`方法(对于`JComponent`),而不是直接在`Frame`上绘制。 ```java import ...

    在登录页面开启闪屏效果

    - **创建闪屏组件**:在代码中创建一个闪屏组件,该组件包含一个文本区域,用于显示加载进度的文字。 - **监听数据加载进度**:通过监听主页面的数据加载事件,获取到加载的进度信息。 - **更新闪屏文字**:当...

    闪屏添加器

    "闪屏添加器"是一种工具,主要用于为应用程序创建或编辑启动时出现的“闪屏”效果。闪屏通常是一段短暂的动画或者静态图像,在应用加载时显示,为用户提供品牌展示或者加载进度的视觉反馈。以下是对这个工具及相关...

    闪屏添加器 (Splasher) 绿色美化版

    “闪屏添加器 (Splasher)”的出现,不仅降低了创建个性化闪屏的门槛,也为非专业开发者提供了实现软件个性化的重要途径。无论你是想为个人项目增添特色,还是希望在商业软件中展示品牌形象,这款工具都能成为你得力...

    Android 自定义闪屏页广告倒计时view效果

    Android 自定义闪屏页广告倒计时 View 效果是指在 Android 应用程序中,使用自定义 View 来实现闪屏页广告倒计时效果。这种效果主要应用于 App 的启动页,目的是展示广告内容,并且提供倒计时功能,允许用户跳过广告...

    winform 窗体 闪屏 彻底解决

    这个问题通常是由于系统在绘制窗体及其控件时的多帧重绘导致的,尤其是在控件数量较多时,这种现象更为明显。"winform 窗体 闪屏 彻底解决"这一主题就是专门针对这个现象,旨在提供一种有效且全面的解决方案。 闪屏...

    Android 实现闪屏页+功能引导页

    5. **添加导航按钮**:为了方便用户浏览,可以在引导页的底部添加上一页和下一页的按钮,或者使用手势滑动切换。 6. **存储状态**:保存用户是否已经完成引导页的浏览,可以使用SharedPreferences。如果用户已看过...

    C# winform闪屏示例

    在窗体上放置所需的元素,如图片控件显示徽标,进度条控件显示加载进度,以及文本控件提供状态信息。 3. **设置启动窗体:** 将刚创建的" SplashScreen "设为启动窗体。在解决方案资源管理器中右键点击项目,选择...

    闪屏窗口源代码闪屏窗口源代码

    在Windows系统中,闪屏窗口通常是用C++、C#或VB.NET等编程语言实现的,通过WinAPI函数或.NET Framework中的控件来创建。以下是一些关键知识点: 1. **窗口类创建**:在Windows API中,要创建任何窗口,首先需要注册...

    模仿Eclipse的闪屏

    在Java环境中,你可以使用Swing或JavaFX库来创建图形用户界面(GUI)。如果是Android应用,那么在Activity的生命周期中,你需要在onCreate()或onStart()方法中添加闪屏界面的显示代码。对于iOS,你可能需要在...

    winform c# 闪屏 调用方式简单

    在`SplashScreen`的构造函数中,初始化一个计时器,并在计时器的`Tick`事件中关闭闪屏: ```csharp public SplashScreen() { InitializeComponent(); splashTimer = new Timer(); splashTimer.Interval = 3000; ...

    android游戏中logo闪屏的简单实现

    以下是一个简单的步骤来实现logo闪屏: 1. 创建布局:在res/layout目录下创建一个新的XML布局文件,比如叫做`splash_screen.xml`,设计出包含logo和其他元素的界面。 2. 创建闪屏Activity:创建一个新的Activity,...

    在wpf中创建一个指定延迟的闪屏

    在实际开发中,你还可以考虑添加更多的功能,比如在闪屏期间加载应用资源、显示加载进度条等。同时,为了使用户体验更加流畅,可以使用动画效果,如淡入淡出,让闪屏过渡更加自然。在WPF中,这可以通过设置`...

    闪屏添加器(给程序加弹出窗口)

    "闪屏添加器"是一款专为程序设计的实用工具,其主要功能是为应用程序添加启动或退出时的弹出窗口,通常用于展示品牌形象、广告信息或者欢迎/告别语句。这款软件是经过汉化处理的绿色版本,意味着它无需安装,用户...

    启动闪屏窗体/设置闪屏窗体

    在C/S(Client/Server)架构的软件开发中,启动闪屏窗体和设置闪屏窗体是常见的功能,主要用于提升用户体验,展示品牌形象,以及在应用程序加载时提供一个过渡效果。闪屏窗体通常是在软件启动初期显示的一个短暂窗口...

Global site tag (gtag.js) - Google Analytics