Java实现软件运行时启动信息窗口的方法
作者:shichen2014 发布时间:2023-01-04 06:21:55
本文实例形式详述了Java实现一个程序运行时的启动窗口效果,如常用的Microsoft Word、 Borland JBuilder 等,这样的窗口称为信息窗口。使用信息窗口的好处是可以使用户在等待软件主界面出现前的一段时间中得知软件运行状态。本例将演示如何来实现信息窗口,当打开程序时,信息窗口先显示,并在窗口上倒计时,直到“waiting 0”时,关闭该窗口,显示程序的主窗口。
该功能的主要实现方法如下:
一般来说,大多数的信息窗口是没有标题栏的,因此信息窗口不能由继承JFrame 类来实现,一种简单的做法是通过继承JWindow 来实现(当然继承Window 类也可以,但一个原则是尽量使用swing 中的界面
类)。另外,本例用到java.awt 包中的MediaTracker 类。使用该类的好处是可以更好地管理程序中要使用的图片,同时还可以保证图片和界面同时显示,避免了窗口显示后很久才显示图片的缺点。
具体操作步骤如下:
1.新建一个Project,取名为JSpleshWindowDemo,其他设置按默认值。
2.新建一个Application ,取名为JSpleshWindowDemo,主窗口取名为MainFrame,主窗口标题取名为JSpleshWindowDemo。
3.先来编写信息窗口的代码。新建一个新类SpleshWindow.java,继承java.swing.JWindow类。在SpleshWindow 类中,定义新的属性,代码如下:
private String statusStr=null; //信息窗口中要显示的信息
private Image logoImg=null; //信息窗口中的显示图片
4.向构造方法中添加代码,加载图片并初始化窗体,实现代码如下:
public SpleshWindow(JFrame owner) { //以JFrame 对象为参数,可以是信息窗口和主窗 * 互
super( owner );
// 加载图片
logoImg=getToolkit().getImage( ClassLoader.getSystemResource("images/splesh.jpg") );
// 等待图片加载完成
java.awt.MediaTracker tracker=new java.awt.MediaTracker( this ); //创建一个MediaTracker 对象
tracker.addImage( logoImg , 0 ); //将图片放入MediaTracker 对象中,序号为0
try{ //等待直到图片加载完成
tracker.waitForAll();
}catch ( InterruptedException e ) {
e.printStackTrace();
}
// 设置信息窗体在屏幕上的显示位置
setLocation( getToolkit().getScreenSize().width/2 - logoImg.getWidth(this)/2 , getToolkit().getScreenSize().height/2 -
logoImg.getHeight(this)/2 );
setSize( logoImg.getWidth(this) , logoImg.getHeight(this) ); // 设置窗口大小
}
5.编写设置显示信息的方法,代码如下:
public void setStatus( String status ){
statusStr=status;
paint( getGraphics() ); // 重画窗口来更新信息窗口中的显示信息
}
6.重置paint()方法来绘制图片和显示信息的方法,代码如下:
public void paint(Graphics g) {
/**@todo Override this java.awt.Component method*/
super.paint(g);
//绘制图片
if ( logoImg!=null )
g.drawImage( logoImg , 0 , 0 , this );
//绘制显示信息
if ( statusStr!=null ){
g.setColor(Color.red);
g.drawString( statusStr , 240 , getSize().height-250 );
}
}
7.编写MainFrame 类,实现java.lang.Runnable 接口,并定义新的属性,设置如下:
private SpleshWindow spleshWindow=null;
8.向MainFrame 类的初始化方法中,添加运行信息窗口的代码,实现代码如下:
private void jbInit() throws Exception {
//setIconImage(Toolkit.getDefaultToolkit().createImage(MainFrame.class.getResource("[Your Icon]")));
contentPane = (JPanel) this.getContentPane();
contentPane.setLayout(borderLayout1);
this.setSize(new Dimension(400, 300));
this.setTitle("JSpleshWindowDemo");
//创建新的线程,运行信息窗口
Thread t = new Thread(this);
t.start();
// 等待信息窗口显示
try{
t.join();
}catch ( InterruptedException e ){
e.printStackTrace() ;
}
// 向信息窗体中显示消息
long x=System.currentTimeMillis();
while ( System.currentTimeMillis()-x <35000 )
{
System.out.print( "Waiting "+(35000-System.currentTimeMillis()+x+" \r") );
// you can set status string in splash window
spleshWindow.setStatus( "Waiting "+(35-(long)(System.currentTimeMillis()/1000)+(long)(x/1000)) );
}
//关闭信息窗体
if ( spleshWindow!=null ) {
spleshWindow.dispose();
spleshWindow=null;
}
}
9.编写MainFrame 类的run()方法,如下所示:
public void run() {
//新建一个信息窗体并显示
spleshWindow=new SpleshWindow( this );
spleshWindow.show();
// throw new java.lang.UnsupportedOperationException("Method run() not yet implemented.");
}


猜你喜欢
- 1、Buffer的继承体系如上图所示,对于Java中的所有基本类型,都会有一个具体的Buffer类型与之对应,一般我们最经常使用的是Byte
- 一、layui.use1、LayUI的官方使用文档:https://www.layui.com/doc/2、layui的内置模块不是默认就加
- 实现方式和继承方式有什么区别呢?*区别:*继承Thread:线程代码存放在Thread子类run方法中*实现Runnable:线程代码存放在
- 在进行一个表达式的计算时,先将表达式分割成数字和字符串然后利用出入栈将分割后的表达式进行中缀转后缀,再将后缀表达式进行计算得到结果(思想在上
- 介绍无论是在WPF中还是WinForm中,都有用户控件(UserControl)和自定义控件(CustomControl),这两种控件都是对
- 简介自从JDK中引入了stream之后,仿佛一切都变得很简单,根据stream提供的各种方法,如map,peek,flatmap等等,让我们
- 本文实例讲述了C#调用VB进行简繁转换的方法。分享给大家供大家参考。具体分析如下:首先在C#项目中引用Microsoft.VisualBas
- 在实际应用中,大家使用的密码可以说多种多样,但是无论有多少,其组成不遑是有可打印字符组成的,我们可以认为class CreateDic{ p
- 本文实例为大家分享了javaweb购物车案列的具体代码,供大家参考,具体内容如下一、项目目录结构 二、源代码dao包——dao层:
- 实例如下://图片到byte数组 public byte[] image2byte(String path){ byte[] d
- 啥都不说先上效果图,这个是我项目里的效果:下面的是我抽取出来的 demo 适配啥的我基本上都做好了没做其他的ok 下面 说一下思路把首先 说
- 本文实例讲述了C#实现程序等待延迟执行的方法。分享给大家供大家参考。具体如下:[System.Runtime.InteropServices
- <foreach>标签动态增删改查mybatis<foreach>有的时候在项目中需要查询某个列表时,可能会在代码中
- 本文实例讲述了C#获取任务栏显示进程的方法。分享给大家供大家参考。具体实现方法如下:private static void getWindo
- 1.基本思路①.创建已加锁应用的数据库(字段:_id,packagename),如果应用已加锁,将加锁应用的包名维护到数据库中②.已加锁+未
- 本文实例为大家分享了C++实现扫雷游戏的具体代码,供大家参考,具体内容如下#include<stdio.h>#include&l
- 在使用Java web开发的后端工程师们大多会使用Maven作为项目构建以及编译的工具,微服务和大中台当道的今天,更加关注maven的细节是
- 定义: SharedPreferences
- 依然使用IE9的捕获参数,做了一个12306的登录功能。参照了网上童鞋们的做法。其他都和前面几篇读取余票、票价一样,不过登录要用到证书的问题
- 一、问题描述上周不是搭了个SpringBoot整合sharding-jdbc分库分表的架子么,组里老哥不让我把开发环境的配置文件放到reso