JDialog一段时间后自动销毁(Timer类实现)

最近做个小项目,需要用到一个信息面板显示,信息轮换,一段时间后自动销毁这个面板。采用了JDialog显示

销毁的时候尝试了线程,dispose等方法均没有实现,还有说将JDialog的引用设置成null更不可能准备实现这种效果,jvm的垃圾回收机制。

后来才了解使用timer类能很好解决:

package com.liu.test;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

/**
 * @author liu
 *5秒后自动关闭JDialog测试
 */
@SuppressWarnings("serial")
public class DialogTest extends JFrame implements ActionListener {
	JButton btnTest = new JButton("打开一个JDialog");

	public DialogTest() {
		setTitle("Test");
		setSize(300, 300);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		add(btnTest, BorderLayout.NORTH);
		btnTest.addActionListener(this);
	}
	public static void main(String... args) {//主函数
		new DialogTest().setVisible(true);
	}

	public void actionPerformed(ActionEvent e) {
		new AutoDialog(this).setVisible(true);//显示以恶搞Jdialog
	}
	private class AutoDialog extends JDialog // implements ActionListener
	{
		JLabel lblMsg = new JLabel("5");
		Timer timer = new Timer(1000, new ActionListener() {//Timer类
			int count = 5;

			public void actionPerformed(ActionEvent e) {
				count--;
				if (count < 0) {//根据count的值进行判断,可以进行很多自己的处理
					timer.stop();
					AutoDialog.this.dispose();//时间倒数完毕,销毁Dialog
				} else
					lblMsg.setText("" + count);
			}
		});

		public AutoDialog(Frame owner) {//构造函数
			super(owner, "Dialog demo", true);

			setSize(100, 100);
			setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
			add(lblMsg, BorderLayout.CENTER);
			timer.start();
		}
	}
}
下面的Dialog类主要的实现部分,将这个类实例化并设置显示后,5秒结束这个Dialog就销毁了。


你可能感兴趣的:(java)