2013-03-06 13 views
12

Java'daki MouseEvents tuşları ve fare düğmeleri arasındaki değiştiricileri neden paylaşıyor?Neden Java'daki tüm Orta Tıklamalar Alt Değiştiriciye Sahip Olduğu Bildirildi mi?

public static void main(String[] args) { 
    JFrame frame = new JFrame(); 
    frame.setSize(800,600); 
    frame.addMouseListener(new MouseAdapter() { 
     public void mouseClicked(MouseEvent e) { 
      System.out.println(e); 
     } 
    }); 
    frame.setVisible(true); 
} 

pencereden (tek sol tık, tek orta tıklama ve bir sağ tıklama) şu çıktıyı göreceksiniz üç kez tıklarsanız:

aşağıdaki basit kod, düşünün. Eğer bakarsanız

java.awt.event.MouseEvent[MOUSE_CLICKED,(165,149),absolute(165,149),button=1,modifiers=Button1,clickCount=1] on frame0 
java.awt.event.MouseEvent[MOUSE_CLICKED,(292,228),absolute(292,228),button=2,modifiers=Alt+Button2,clickCount=1] on frame0 
java.awt.event.MouseEvent[MOUSE_CLICKED,(293,228),absolute(293,228),button=3,modifiers=Meta+Button3,clickCount=1] on frame0 

, tüm orta tıklama aşağı alt anahtarını sahip olarak bildirilir ve tamam tıklama aşağı Meta tuşu sahip olarak rapor edildiğini göreceksiniz. Bu iyi belgelenmiştir ve MouseEvent için Javadocs'ta bu çakışmadan söz eden bir satır bile vardır. Ama sorum şu, neden böyle bildiriliyor? Bir orta tıklama için e.isAltDown() 'dan doğru geri dönmenin ardındaki sebep nedir?

Bu, bazı platformlarda Alt + Button1 ve Button2 arasında ayrım yapmayı zorlaştırır.

Benzer şekilde, Java'da platformlar arası fare davranışları tasarlamak için herhangi bir "En İyi Uygulama" kılavuzları var mı?

+1

Macs. Veya tek tuşlu fareler kullanabilen diğer sistemler. – GSP

cevap

7

Bayrakların yeniden kullanılmasının tarihi nedenlerden ötürü olduğuna inanıyorum. Sadece orijinal motivasyonları tahmin edebilirim, ancak gelecekteki uzantılar için daha fazla bitin kalması için çok fazla bit kullanılmıyor olabilir. Bir başkası Mac'in sadece tek bir faresi olduğu gerçeği olabilirdi, bu yüzden modifiye ediciler, Mac'lerde, genellikle bunlardan yeterli sayıda olan sistemlerde genellikle farklı bir fare düğmesini kullanacakları şeyleri belirtmek için yaygın olarak kullanıldılar.

Java 1.4'ten beri, bu değiştiricileri ve düğmeleri ayrı ayrı rapor edecek olan getModifiersEx kullanmayı tercih ederim. Bu yüzden bilgi kullanılabilir, geriye dönük uyumluluğu sağlamak için eski arayüzden rapor edilmez.

+0

Özgün motivasyonlara giren tasarım gereksinimleri hakkında biraz daha fazla şey öğrenmeyi umuyordum. – JohnnyO

İlgili konular