2017-01-11 55 views
0

我想知道是否有一種有效的方式來處理座標範圍內的鼠標點擊,而不是一堆if語句。這導致我考慮使用監聽器來處理它,但是甚至可以將監聽器分配給任意對象?高效處理鼠標點擊

回答

0

如果您正在討論如同JButton一樣在JComponent上監聽鼠標動作,則可以將MouseListener添加到JComponent。

如果您正在討論由您創建的對象,該對象在面板中顯示爲圖像,則可以將MouseListener添加到包含您的對象的面板。在每次單擊鼠標時,遍歷面板中的對象並檢查對象是否包含鼠標光標。

class DisplayPanel extends JPanel{ 

    //Your constructor and other members.. 
    public DisplayPanel(){ 
     addMouseListener(new MouseAdapter(){ 
      public void mouseClicked (MouseEvent e){ 
       for(MyObjects : obj) 
        if(obj.contains(e.getX(), e.getY())) 
         clickedObj = obj; 
      } 
     }); 
    } 
} 

你的意思已經任意類擴展JComponent的?如果它已經擴展了另一個課程呢?

另一種方法是考慮製作一個定製的JComponent。但是,如果你的對象已經擴展到另一個類。您可以考慮構圖的繼承:

class ArbritaryComponent extends JComponent{ 
    private ArbritaryObject obj; 
} 

class ArbritaryObject extends SomeClass{ 
    private Image image; 
} 

然後將偵聽器添加到您的自定義組件。 想要定製JComponent的一個簡單的想法:Extending JComponent

+0

我試圖擺脫迭代如果可能的話,但是這是爲了出現在JFrame上的圖像,但是我創建的對象。 –

+0

@JacobG。你有多少物品? – user3437460

+0

還不夠,在迭代它們時會減慢程序速度,但我很好奇是否有其他方式處理它。 –