Идентифицируя двойной щелчок в Java
Я хочу знать, как мы можем выполнить действие, если дважды щелкнуть мышью в компоненте.
3 ответа
public void mouseClicked(MouseEvent event)
{
if (event.getClickCount() == 2) {
System.out.println("double clicked");
}
}
Предполагая, что вы имеете в виду Swing, назначьте MouseListener для вашего Компонента:
addMouseListener(new MouseAdapter(){
@Override
public void mouseClicked(MouseEvent e){
if(e.getClickCount()==2){
// your code here
}
}
});
Ссылка:
- Учебник по Java: как написать слушатель мыши
e.getClickCount()==2
этого недостаточно, если вы хотите, чтобы ваши пользователи делали несколько двойных кликов за короткую задержку. Вы ограничены конфигурацией рабочего стола. Вы можете получить это, посмотрев результат Toolkit.getDefaultToolkit().getDesktopProperty("awt.multiClickInterval");
Хороший способ обойти проблему - не использовать getClickCount()
проверить, но использовать Timer
где вы можете выбрать максимальный интервал между кликами и самостоятельно обработать счет (очень просто).
Код связан:
boolean isAlreadyOneClick;
@Override
public void mouseClicked(MouseEvent mouseEvent) {
if (isAlreadyOneClick) {
System.out.println("double click");
isAlreadyOneClick = false;
} else {
isAlreadyOneClick = true;
Timer t = new Timer("doubleclickTimer", false);
t.schedule(new TimerTask() {
@Override
public void run() {
isAlreadyOneClick = false;
}
}, 500);
}
}
Протестировано с Win Xp OS и отлично.
Моя проблема заключается в том, что я должен реагировать одним способом, если пользователь нажимает один раз, другим, если он щелкает более одного раза (моя виртуальная машина Swing, кажется, способна считать до четырех нажатий, когда я нажимаю несколько раз). Когда я запустил приведенный выше пример, мне показалось, что тройной щелчок считается одним. Итак, вот мой переписать. По сути, у меня есть запланированное задание, которое ждет, пока пыль не очистится, а затем проверяет количество зарегистрированных кликов. Ожидание 400 мс, кажется, работает лучше всего для меня.
JButton jButton = new JButton("Click Me!");
jButton.addMouseListener(new MouseAdapter() {
private int eventCnt = 0;
java.util.Timer timer = new java.util.Timer("doubleClickTimer", false);
@Override
public void mouseClicked(final MouseEvent e) {
eventCnt = e.getClickCount();
if ( e.getClickCount() == 1 ) {
timer.schedule(new TimerTask() {
@Override
public void run() {
if ( eventCnt == 1 ) {
System.err.println( "You did a single click.");
} else if ( eventCnt > 1 ) {
System.err.println("you clicked " + eventCnt + " times.");
}
eventCnt = 0;
}
}, 400);
}
}
});