java制作欢迎屏幕123

我们可以在应用程序的开始加入一个欢迎屏幕。欢迎屏幕既是宣传产品的方法之一,而且在长时间的应用启动过程中,欢迎屏幕还用来表示应用正在准备过程中。

1。最简单的欢迎屏幕实现:

class SplashWindow1 extends JWindow
{
 public SplashWindow1(String filename, Frame f)
 {
  super(f);
  JLabel l = new JLabel(new ImageIcon(filename));
  getContentPane().add(l, BorderLayout.CENTER);
  pack();
  Dimension screenSize =Toolkit.getDefaultToolkit().getScreenSize();
  Dimension labelSize = l.getPreferredSize();
  setLocation(screenSize.width/2 - (labelSize.width/2),
  screenSize.height/2 - (labelSize.height/2));
  setVisible(true);
  screenSize = null;
  labelSize = null;
 }
}

  SplashWindow1类从Swing的JWindow派生。JWindow是一个容器,它没有其他窗口所具有的各种窗口元素,如标题条、窗口管理按钮,甚至连突出显示的边框也没有。因此,JWindow对于制作欢迎屏幕来说是非常合适的。上面的代码假定图形文件在当前目录。图形通过ImageIcon装入内存,然后它就被放到了JWindow的中心。接着,窗口被pack(),这使得Swing把窗口调整到适当的大小,最后窗口被移到了屏幕的中心。

2。如果我们运行上面的程序,可以发现虽然欢迎画面确实出现在屏幕中央,但遗憾的,它却不会关闭!要关闭欢迎画面,我们需要加入更多的代码:

class SplashWindow2 extends JWindow
{
 public SplashWindow2(String filename, Frame f)
 {
  super(f);
  JLabel l = new JLabel(new ImageIcon(filename));
  getContentPane().add(l, BorderLayout.CENTER);
  pack();
  Dimension screenSize =Toolkit.getDefaultToolkit().getScreenSize();
  Dimension labelSize = l.getPreferredSize();
  setLocation(screenSize.width/2 - (labelSize.width/2),
  screenSize.height/2 - (labelSize.height/2));
  addMouseListener(new MouseAdapter()
  {  
   public void mousePressed(MouseEvent e)
   {
    setVisible(false);
    dispose();
   }
  });
  setVisible(true);
 }
}

  和原先的SplashWindow1类相比,这个SplashWindow2类唯一的区别在于多出了一个安装到JWindow上的匿名MouseListener。经过这个改动之后,用户可以点击欢迎屏幕关闭它。

3。现在我们有了一个很不错的欢迎屏幕,它可以通过点击的方法关闭,但它不会自己消失。接下来我们要加入代码,使得欢迎屏幕在显示一定的时间之后自动消失。这里我们要考虑到运用线程。

class SplashWindow3 extends JWindow
{
 public SplashWindow3(String filename, Frame f, int waitTime)
 {
  super(f);
  JLabel l = new JLabel(new ImageIcon(filename));
  getContentPane().add(l, BorderLayout.CENTER);
  pack();
  Dimension screenSize =Toolkit.getDefaultToolkit().getScreenSize();
  Dimension labelSize = l.getPreferredSize();
  setLocation(screenSize.width/2 - (labelSize.width/2),
  screenSize.height/2 - (labelSize.height/2));
  addMouseListener(new MouseAdapter()
  {
   public void mousePressed(MouseEvent e)
   {
    setVisible(false);
    dispose();
   }
  });
  final int pause = waitTime;
  final Runnable closerRunner = new Runnable()
  {
   public void run()
   {
    setVisible(false);
    dispose();
   }
  };
  Runnable waitRunner = new Runnable()
  {
   public void run()
   {
    try
    {
     Thread.sleep(pause);
     SwingUtilities.invokeAndWait(closerRunner);
    }
    catch(Exception e)
    {
     e.printStackTrace();
     // 能够捕获InvocationTargetException
     // 能够捕获InterruptedException
    }
   }
  };
  setVisible(true);
  Thread splashThread = new Thread(waitRunner, "SplashThread");
  splashThread.start();
 }
}

  这里的基本思路是利用一个在一定时间内暂停等待的Thread对象。在上面的代码中,线程的暂停时间是4秒。当这个线程唤醒时,它将关闭欢迎屏幕。由于Swing是非线程安全的,除非代码在事件分派线程上执行,否则它就不应该影响任何UI组件的状态。所谓事件分派线程,就是Swing中负责绘图和事件处理的线程。

  为了解决这个问题,Swing设计者赋予我们安全地把Runnable对象加入UI事件队列的能力。在本例中,我们用可运行对象closerRunner完成最关键的工作。我们把可运行对象传入SwingUtilities.invokeAndWait()静态方法,然后wingUtilities.invokeAndWait()进行所有未完成的UI操作,并执行传递给该方法的可运行对象closerRunner的run方法。通过运用一个独立的线程负责欢迎屏幕的关闭操作,应用担负起了显示和关闭欢迎屏幕之间的所有操作。

  如果要让欢迎屏幕总是显示且用户不能关闭它,你必须删除那些隐藏欢迎屏幕的代码。如果要让欢迎屏幕只能由用户手工关闭,你可以象使用任何其他JWindow对象一样调用SplashWindow3对象上的setVisible(false)和dispose()方法。

时间: 2024-10-30 22:27:25

java制作欢迎屏幕123的相关文章

用Java Swing制作欢迎屏幕

几乎所有时髦的应用都有一个欢迎屏幕.欢迎屏幕既是宣传产品的方法之一,而且在长时间的应用启动过程中,欢迎屏幕还用来表示应用正在准备过程中. 下面是一个最简单的欢迎屏幕实现: class SplashWindow1 extends JWindow { public SplashWindow1(String filename, Frame f) { super(f); JLabel l = new JLabel(new ImageIcon(filename)); getContentPane().ad

java制作简单的坦克大战_java

详情请参照注释,这里就不多废话了,实现一下儿时的经典而已. Blood.java package com.hkm.TankWar; import java.awt.*; /** * 血块类,我方坦克吃了可回血: * @author Hekangmin * */ public class Blood { private int x,y,w,h;//血块的位置和宽度高度: private TankWarClient tc; private int step=0;//纪录血块移动的步数: privat

用VC.NET制作启动屏幕的新方法

在利用VC++.net编程过程中,遇到制作启动屏幕的问题,几经试验,得出一种方便简单的制作方法. 基本原理是利用对话框窗口的特性,在启动时首先创建对话框,设置一个获得位图文件的句柄,利用Picture控件的SetBitmap(HBITMAP hBitmap)方法,使位图文件充满整个Picture控件窗口,最后设置定时器,整个启动屏幕就制作完成. 下面介绍具体实现步骤. 1. 打开VS.net的开发环境,新建VC++.net中的MFC应用程序,输入工程名称MySample,点击"确定",

数据-使用java制作随机点名系统

问题描述 使用java制作随机点名系统 要求从excel表格中读取学生数据,假如表格中是一行一个学生的数据,随机点出一个学生.显示学生后需要计算机读出学生的信息(发出声音) 解决方案 http://download.csdn.net/detail/gwh19860910/1288084 解决方案二: 这好像我基础班的时候老师教了. 也不多那个随机彩票一样. 解决方案三: 使用excel的工具包Poi将excel文件的内容读入内存,存入列表中,然后用随机数生成待取回的数据编号.显示对应的数据信息.

窗体-关于JAVA制作桌面挂架的一些问题

问题描述 关于JAVA制作桌面挂架的一些问题 这个问题之前一直在网上找答案,还是找不到,在这里冒昧的请教一下,就是关于用 java显示一张异形图片,但是不显示承载这个图片的容器窗体,看上去就给人一种只显示了一张图片的感觉,之前想过用JFrame窗体显示,之后让JFrane透明,但是这样的话,上面的图片也透明了,之后看网上有人用了一个com.sun.awt.AWTUtilities的类去实现,不过这个方法貌似也不行,能问一下有什么办法去实现这个问题吗?

用java制作QQsmart机器人

问题描述 用java制作QQsmart机器人 先是访问这个网址获取二维码以及cookie,https://ssl.ptlogin2.qq.com/ptqrshow?appid=501004106&e=0&l=M&s=5&d=72&v=4&t=0.4139144900254905 然后再带着cookie去访问这个网址获取其他参数https://ssl.ptlogin2.qq.com/ptqrlogin?webqq_type=10&remember_ui

监听-java 制作提示输入 求助

问题描述 java 制作提示输入 求助 我在JTextArea里设置监听,输入文本后会弹出一个含有JList的JWindow,通过选择JList里的选项可以自动完成输入,类似Myeclipse的提示输入功能.但是Jlist选项只能用鼠标选择,用键盘↑↓不能选择,键盘↑↓只会改变JTextArea里键盘光标的位置,请问怎么解决? 解决方案 http://stackoverflow.com/questions/14402091/jlist-horizontal-auto-scroll-to-righ

用Swing制作欢迎屏幕 (转自赛迪网)

用Swing制作欢迎屏幕(松下客 2001年05月30日 18:49)几乎所有时髦的应用都有一个欢迎屏幕.欢迎屏幕既是宣传产品的方法之一,而且在长时间的应用启动过程中,欢迎屏幕还用来表示应用正在准备过程中.下面是一个最简单的欢迎屏幕实现: class SplashWindow1 extends JWindow{    public SplashWindow1(String filename, Frame f)    {        super(f);        JLabel l = new

java制作计算器的时候同时输入两个运算符出错

问题描述 java制作计算器的时候同时输入两个运算符出错 按照慕课网一步一步做的,但是做完之后存在一个问题,就是如果已经输入了一个运算符号,继续输入一个运算符号,后输入的那一个并不会将原来的那个符号覆盖,所以就会运算出错.请问有什么方法解决?(我尝试通过if判断是否已经输入了运算符,如果已经输入,就把原来的截去之后再写入新的运算符,但是没有效果) package com.example.calculator; import android.app.Activity; import android