JDialog一段時間後自動銷燬(Timer類實現)
阿新 • • 發佈:2019-01-03
最近做個小專案,需要用到一個資訊面板顯示,資訊輪換,一段時間後自動銷燬這個面板。採用了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
}
下面的Dialog類主要的實現部分,將這個類例項化並設定顯示後,5秒結束這個Dialog就銷燬了。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(); } } }