2011-11-18 48 views
1

我有一個簡短的問題,我希望有人能幫助我。如何推遲Java中的MouseOver?

請看下面的代碼片段:

public void mouseEntered(MouseEvent e){ 
    //wait 2 seconds. 
    //if no other mouseEntered-event occurs, execute the following line 
    //otherwise restart, counting the 2 seconds. 
    foo(); 
} 

有人可以幫我這個問題?我想實現一個像ToolTip一樣的行爲:用鼠標輸入一個區域。如果你的鼠標停留在那個位置,那麼做點什麼。

回答

6

mouseEntered()方法中啓動一個Timer,延遲時間爲2秒,該方法調用您想要執行的任何操作。

設置一個新的處理程序(mouseExited()),可以在計時器沒有關閉時停止計時器。

基本上,你知道如果沒有調用mouseExited(),鼠標仍然存在。計時器將在兩秒鐘內完成所需操作,或者在鼠標退出時取消。

+0

謝謝你的快速回復。它工作正常:) – Michael

1

雖然@Brian Roach提供的答案是正確的,但還有另一種(也是更簡潔)的方法來實現這一點。也就是說,使用ToolTipManager

實施例:

import java.awt.FlowLayout; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.SwingUtilities; 
import javax.swing.ToolTipManager; 

public final class ToolTipDemo { 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable(){ 
      @Override 
      public void run() { 
       ToolTipManager.sharedInstance().setInitialDelay(2000); 
       createAndShowGUI(); 
      } 
     }); 
    } 

    private static void createAndShowGUI(){ 
     final JFrame frame = new JFrame(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setLayout(new FlowLayout()); 
     frame.add(new JToolTipButton()); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

    private static final class JToolTipButton extends JButton{ 
     private static final long serialVersionUID = -5193366265809801639L; 

     protected JToolTipButton(){ 
      super("I can haz tooltip?"); 
      setToolTipText("Hey man, get off me!"); 
     } 
    } 

} 

通過調用setInitialDelay,我已經改變了經理等待從750ms之間的顯示工具提示2000MS的時間。

注 - 雖然我不確定,但我認爲這可能會改變所有組件的延遲(guess I was right),這可能不是您想要的..但​​它仍值得一提。