1. 程式人生 > >JDialog一段時間後自動銷燬(Timer類實現)

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就銷燬了。