2015-04-11 5 views
0

Есть ли способ выяснить, как первое перемещение мышью мыши на Java?Первое перемещение мышью мыши

Например:

public void mouseDragged(MouseEvent e) 
{ 
    if (first drag of the mouse) // what should I write here? 
     System.out.println("This is the first drag"); 
    else System.out.println("This isn't the first drag"); 
} 

Если я перетащить мышью 5 раз я должен увидеть этот текст в консоли:

This is the first drag 
This isn't the first drag 
This isn't the first drag 
This isn't the first drag 
This isn't the first drag 
+0

Хорошо старые булевские флаги! – Airhead

ответ

1
boolean first=true;//this should be a instance variable. 

первый перетащить! использовать логическую переменный для обнаружения первого или not.like этого

public void mouseDragged(MouseEvent e) 
{ 
    if (first) { // this is only true if it's first drag 
     System.out.println("This is the first drag"); 
     first=false; 
    } 
    else { 
     System.out.println("This isn't the first drag"); 
    } 

} 

обновления ...

это, как и может обнаружить это первый drag.but есть проблема, как правило, мыши перетащить событие вызвало во время перетаскивания . Чтобы избежать этого, вы можете немного изменить этот бит.

объявить переменные экземпляра

boolean draging = true; 
boolean mark = true; 
boolean first = true; 

печать только при перемещении start.when мы выводим мышь тащит мы перестанем печатать, пока мышь не выпустили и redragging.

public void mouseDragged(java.awt.event.MouseEvent evt) { 
     draging = true; 
     if (mark) { 
      if (first) { 
       System.out.println("This is the first drag"); 
      }else{ 
       System.out.println("This isn't the first drag"); 
      } 
      mark = false; 
     } 
} 

изменение первого ложное так первое перетаскивание enough.and готово к печати нового сопротивлению [знак = True]

public void mouseReleased(java.awt.event.MouseEvent evt) { 
      if (draging) { 
      mark = true; 
      first=false; 
     } 
} 

это выход 1-го и обновляются examples.there проблема 1-й код [потому что перетаскивание события запускается непрерывно при перетаскивании, а не в единицах).

первого пример

This is the first drag 
This is the first drag 
This is the first drag 
.............................//this continues until u finish[released] first drag 
This isn't the first drag 
This isn't the first drag 
This isn't the first drag 
................................ 

обновляется один

This is the first drag //a drag [ click--move--relesed] mark only 1time 
This isn't the first drag 
This isn't the first drag 
This isn't the first drag 
............................... 
0

Я бы изменить FastSnails решения этой проблемы немного обойти поведение, которое mouseDragged пожаров на каждое движение мышей в то время как кнопка вниз:

boolean first = true; 
boolean triggered = false; 

public void mouseDragged(MouseEvent e){ 
    if(!triggered){ 
     if(first){ 
      System.out.println("This is the first drag"); 
      first=false; 
     } 
     else{ 
      System.out.println("This isn't the first drag"); 
     } 
     triggered = true; 
    } 
} 

Конечно, мы тогда должны сбросить этот флаг в случае mouseReleased, который сигнализирует об окончании «перетаскивания»:

public void mouseReleased(MouseEvent e){ 
    triggered = false; 
} 

Используя этот метод означает, что сообщение только получает срабатывает один раз за «сопротивление», а чем при каждом движении мыши.