2011-06-27 105 views
1

我有一個框架,它啓動swingTimer執行週期性任務。問題是當我關閉框架時,任務仍然繼續。如果按下關閉按鈕,我想讓swingTimer停止。關閉幀關閉jTimer

我已經試過指定EXIT_ON_CLOSEDISPOSE_ON_CLOSE但這些不起作用。有人知道我應該怎麼做嗎?

謝謝

+2

什麼是jTimer?你不是在談論Swing Timer嗎?如果EDT結束,我認爲Swing Timers應該停止。它也有一個stop()方法,可以完全停止它。 –

+0

對不起,我的意思是SwingTimer不是JTimer – Roger

回答

3

擺動計時器有一個停止方法。如果「框架」(JFrame ??)通過WindowListener結束,則始終可以調用該框架。

另外,根據我的測試,如果EDT停止,Timer應該自行停止。例如:

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

public class StopTimer extends JPanel { 
    private static final float FONT_SIZE = 32; 
    private Timer myTimer; 
    private JLabel timerLabel = new JLabel("000"); 
    private int count = 0; 

    public StopTimer() { 
     timerLabel.setFont(timerLabel.getFont().deriveFont(FONT_SIZE)); 
     add(timerLabel); 

     int timerDelay = 1000; 
     myTimer = new Timer(timerDelay , new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      count++; 
      timerLabel.setText(String.format("%03d", count)); 
      System.out.println("count: " + count); 
     } 
     }); 
     myTimer.start(); 
    } 

    private static void createAndShowUI() { 
     JFrame frame = new JFrame("StopTimer"); 
     frame.getContentPane().add(new StopTimer()); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     java.awt.EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      createAndShowUI(); 
     } 
     }); 
    } 
} 

如果不幫你,然後做我做了什麼:張貼小編譯和執行的程序演示你的問題。

+1

+1,性感代碼.. – mre

+1

@little:LOL!我見過很多形容詞來描述我的代碼,大多數我不能在這裏重複,但**從來沒有**性感!謝謝你的笑! –

+0

@Hovercraft,非常歡迎!很高興看到有人正確使用Swing。 :) – mre