Как я могу отложить MouseOver в Java? - PullRequest
1 голос
/ 18 ноября 2011

У меня короткий вопрос, и я надеюсь, что кто-нибудь сможет мне помочь.

Пожалуйста, посмотрите следующий фрагмент кода:

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();
}

Может кто-нибудь помочь мне с этой проблемой? Я хочу реализовать поведение, похожее на всплывающую подсказку: вы вводите область мышью. Если ваша мышь остается в этом положении, сделайте что-нибудь.

Ответы [ 2 ]

6 голосов
/ 18 ноября 2011

Запустите Таймер с задержкой в ​​2 секунды в вашем mouseEntered() методе, который вызывает все, что вы хотите сделать.

Установите новый обработчик (mouseExited()), который останавливает таймер, если он не выключился.

По сути, вы знаете, что мышь все еще там, если mouseExited() не вызывали. Таймер либо отключится через две секунды, делая то, что вы хотите, либо будет отменен, если мышь выйдет.

1 голос
/ 18 ноября 2011

Хотя ответ, предоставленный @ Брайан Роуч , является правильным, существует еще один (и более краткий) способ достижения этого.То есть, используя 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, я изменил времяменеджер ожидает отображения всплывающей подсказки от 750 мс до 2000 мс.

Примечание. Хотя я не уверен, думаю, это может изменить задержку для ВСЕХ компонентов ( думаю, я был прав ), что, возможно, не то, что вы хотите ... но все же стоит упомянуть.

...