2013-03-06 15 views
12

爲什麼Java中的MouseEvents在鍵和鼠標按鈕之間共享修飾符?爲什麼Java中的所有中間點擊報告具有Alt修飾符?

考慮,下面的簡單代碼:

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

如果在窗口(一個左擊,一箇中間點擊,和一個右鍵),你會看到下面的輸出點擊三次。

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 

如果你看看,你會發現,所有的中間點擊報告爲包含alt鍵下來,沒事的點擊報告爲包含Meta鍵下來。這是有據可查的,甚至有一條Javadocs的MouseEvent提到了這種重疊。但我的問題是,爲什麼這樣報道?從e.isAltDown()返回true以實現中間點擊的原因是什麼?

這使得在某些平臺上難以區分Alt + Button1和Button2。

同樣,是否有任何「最佳實踐」指南用於設計Java中的跨平臺鼠標行爲?

+1

Macs。或者其他可能使用一鍵式鼠標的系統。 – GSP 2013-03-06 18:53:39

回答

7

我相信這個標誌的重用是出於歷史原因。我只能猜測最初的動機,但可能沒有使用太多的位,以便更多的位可用於未來的擴展。另一個可能是因爲Mac只有一個鼠標,所以修飾符在Mac上通常用來表示通常在具有足夠數量的這些系統上使用不同鼠標按鈕的事物。

自Java 1.4以來,我寧願使用getModifiersEx,它將分別報告這些修飾符和按鈕。所以信息是可用的,它只是不通過舊界面報告,以維持向後兼容性。

+0

我希望能更多地瞭解進入最初動機的設計要求。 – JohnnyO 2013-03-14 16:55:33

相關問題