Bir bileşende fare çift tıklandığında nasıl harekete geçebileceğimizi bilmek istiyorum.java'da çift tıklatma belirleme
cevap
public void mouseClicked(MouseEvent event)
{
if (event.getClickCount() == 2) {
System.out.println("double clicked");
}
}
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:
- Java Eğitimi: How to write a Mouse Listener
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);
}
}
.
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
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
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
Muhtemelen sol fare düğmesiyle çift tıklamayı saymak için 'event.getButton() == MouseEvent.BUTTON1' seçeneğini de kontrol etmek isteyeceksiniz. –