2013-07-15 27 views
1

我有一個主類實現MouseListener和這個類內的TimerTask.How我可以在MouseEnter事件中運行此代碼。我的意思是當鼠標移到框架Timer任務將exacute指定的時間(我是如此我的英語水平)如何使用MouseListener事件

public class NewClass extends JPanel implements MouseListener { 

public NewClass() { 
    JFrame frame=new JFrame(); 
    addMouseListener(this); 
    Timer t=new Timer(); 
    TimerTask task=new TimerTask() { 

     @Override 
     public void run() { 
      System.out.println("heloo"); 
     } 
    }; 
    t.schedule(task, 1000); 


    } 


@Override 
public void mouseEntered(MouseEvent me) { 

} 


public static void main(String[]args){ 

    JFrame frame=new JFrame(); 
    frame.add(new NewClass()); 
    frame.setSize(300,300); 
    frame.setVisible(true); 
} 

} 
+0

你到底是什麼意思?只要鼠標位於面板中,您是否希望定時器啓動?或者只要你繼續移動,定時器就會重置? –

+0

只要MouseEnter事件工作運行方法也將在每1000毫秒工作 – user2583511

回答

1

始終使用Swing Timer的GUI相關的任務,如提及的javadoc:

一般情況下,我們推薦使用Swing的計時器,而不是 人顧通用定時器I相關的任務,因爲Swing定時器全部共享相同的預先存在的定時器線程,並且與GUI相關的任務 在事件分派線程上自動執行。但是,如果您不打算從計時器觸摸GUI,或者需要執行冗長的處理,則您可能會使用通用計時器。

閱讀本教程,你就會明白我做了什麼後:

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

public class TimerDemo extends JFrame { 

    private static final long serialVersionUID = 1L; 
    private javax.swing.Timer timer; 

    public TimerDemo() { 
     super("Panel Timer Demo"); 
     //initialing swing timer 
     timer = new javax.swing.Timer(100, getButtonAction()); 
     JPanel p = new JPanel(); 
     p.addMouseListener(new MouseAdapter(){ 
      @Override 
      public void mouseEntered(MouseEvent ev){ 
       timer.start(); 
      } 
      @Override 
      public void mouseExited(MouseEvent ev){ 
       timer.stop(); 
       } 
      }); 

      p.setBackground(Color.blue); 

      getContentPane().add(p,BorderLayout.CENTER); 
      setDefaultCloseOperation(3); 
      setLocationRelativeTo(null); 
      pack(); 
    } 

    private ActionListener getButtonAction() { 
     ActionListener action = new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       System.out.println("Heloo"); 
      } 
     }; 
     return action; 
    } 

    public static void main(String... args) { 
     javax.swing.SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       new TimerDemo().setVisible(true); 
      } 
     }); 
    } 
} 
+0

比你這麼多....很好的例子 – user2583511