我使用ImageIcon功能在JLabel內部顯示了一個圖像。在JLabel中的圖像上單擊時獲取鼠標的X和Y位置
JLabel包含在JPanel中。
當圖像被點擊時,我想獲取鼠標相對於圖像的位置。
我想通過將鼠標監聽器添加到包含 圖像的JLabel來解決此問題。
顯然,即使我將JLabel的大小設置爲圖像的寬度和高度,JLabel似乎也會自動伸展到JPanel的大小。
因此,當下面的代碼運行時,如果圖像的大小比JPanel小,則獲取X和Y位置將返回不需要的值。
有沒有一種方法可以專門限制JLabel的大小,以便獲得鼠標的X位置和Y位置正常工作?
或者更好的方式來獲得相對於圖像的鼠標位置?因爲佈局管理器控制您的標籤,不是的setSize()調用的大小(它會更好)
ImageIcon icon = new ImageIcon(image);
JLabel imageLabel = new JLabel(icon);
imageLabel.setSize(image.getWidth(null), image.getHeight(null));
imageLabel.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {
JOptionPane.showMessageDialog(imageLabel, e.getX()+" "+e.getY());
}
});
imageLabel.validate();
panel.add(imageLabel);
panel.validate();
如果覆蓋'paintComponent()',並且不需要添加更多組件,則'JComponent'提供的功能幾乎與'JPanel'幾乎一樣。無論使用哪種方式,我仍然會選擇使用正確佈局的面板中的標籤。 –
(幾乎重複的答案?)0)另一個ist中的最後一段死於點(layoutManager規則),因爲它是第一個。中間的東西是..不太好:1)似乎沒有任何需要擴展只是爲了顯示圖標2)如果有需要 - f.i.使用面板的自然角色作爲容器並顯示背景圖像 - 然後覆蓋getPref/Max可以(也可能應該)完成,但是沒有幫助(參見第0項)3)沒有問題「填充和這樣的「在一個帶有圖標的簡單標籤中,空文本和空白邊框..沒有野蠻的猜測,請:-) – kleopatra