我使用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