2010-10-29 16 views

cevap

76
public void mouseClicked(MouseEvent event) 
{ 
    if (event.getClickCount() == 2) { 
    System.out.println("double clicked"); 
    } 
} 
+2

Muhtemelen sol fare düğmesiyle çift tıklamayı saymak için 'event.getButton() == MouseEvent.BUTTON1' seçeneğini de kontrol etmek isteyeceksiniz. –

16

Eğer Swing demek senin Bileşeni için bir MouseListener atamak varsayarsak:

addMouseListener(new MouseAdapter(){ 
    @Override 
    public void mouseClicked(MouseEvent e){ 
     if(e.getClickCount()==2){ 
      // your code here 
     } 
    } 
}); 

Referans:

14

Kullanıcılarınızın kısa bir gecikmede birden fazla çift tıklama yapmasına izin vermek istiyorsanız 10 yeterli değildir. Masaüstü yapılandırmasıyla sınırlıdır. Sorunu atlamasına Toolkit.getDefaultToolkit().getDesktopProperty("awt.multiClickInterval");

iyi bir yolu sonucunu bakarak alabilirsiniz getClickCount() çek kullanmak ancak tıklama arasındaki aralığı max seçebileceğiniz bir Timer kullanmak ve kendi kendine işlemek için değil saymak (çok basit). ilişkili

kodu: Win Xp OS ve mükemmel ile test edilmiştir

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

.

+0

Bir bayrağın işaretini kaldırmak için bir 'Timer' akıllı kullanımı, iki isim arasındaki karşılaştırmadan daha karmaşık fakat kullanımı daha kolaydır. Gördüğüm dezavantaj: 'isAlreadyOneClick' nerede saklanır? Birbirini çözerken problemler getiriyor gibi görünüyor. Bu çözümde, tıklamaların çok hızlı bir şekilde yapılması durumunda ("hayal edelim") "delikler" de olacaktır: "Zamanlayıcı", bayrağı her seferinde sıfırlayacak ve sadece bu zamanda, gerçek bir çift tıklama ele alınacaktır. Ayrıca, bu yöntemin gerçekten GC ve kaynak dostu olmadığını düşünüyorum. – Benj

+0

Hello Benj Çöp Toplayıcı ve bayrak arasındaki ilişkiyi anlamayı başaramıyorum. Devam etmenin bir şeyleri kırdığını düşünüyor musun? Lütfen, örnek ve sonuçlarını daha da netleştirebilir misiniz? Üzgünüz, ne göstermeye çalıştığınızı göremiyorum. – davidxxx

+2

Gördüğüm iki şey var: 1/Sadece "else" parçasının her çalıştırılacağı zaman, yeni bir "Timer" nesnesi oluşturulacak. Bu zamanlayıcıyı, nesnenin sağ tuşu veya başka bir yerden başka yerlerden yönetmesine izin vermek için bir alanın alanı olarak hareket ettiririm. 2/Bu zamanlayıcılar, her 500ms çift tıklamayı unflaing olacak, sonra iki kez çift tıklama varsa, beklendiği gibi çalışmayan için şans vardır. – Benj

İlgili konular