How can I delay a MouseOver in Java?

前端 未结 2 1995
北恋
北恋 2020-12-18 14:24

I\'ve got a short question and I hope somebody can help me.

Please look at the following code snippet:

public void mouseEntered(MouseEvent e){
   //w         


        
相关标签:
2条回答
  • 2020-12-18 14:39

    Start a Timer with a delay of 2 seconds in your mouseEntered() method that calls whatever it is you want to do.

    Set up a new handler (mouseExited()) that stops the timer if it hasn't gone off.

    Basically, you know the mouse is still there if mouseExited() hasn't been called. The timer will either go off in two seconds doing what you want or be cancelled if the mouse exits.

    0 讨论(0)
  • 2020-12-18 14:49

    Although the answer provided by @Brian Roach is correct, there is yet another (and more succinct) way of achieving this. That is, using the ToolTipManager.

    Example:

    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!");
            }
        }
    
    }
    

    By invoking setInitialDelay, I've changed the time the manager waits to display the tool tip from 750ms to 2000ms.

    Note - Although I'm not sure, I think this may change the delay for ALL components (guess I was right), which may not be what you want..but it's still worth mentioning.

    0 讨论(0)
提交回复
热议问题