我有一个图片,JLabel
我想要做的是当我点击 时JLabel
,会出现另一个Jlabel
矩形形式的。
我尝试使用paintComponent
orpaint
不幸的是,它不适用于我的程序。paintComponent
所以我不得不认为除了和/或之外还有其他方法paint
。
目的是用名称标记图像的某个部分,例如在 Facebook 中。
我有一个图片,JLabel
我想要做的是当我点击 时JLabel
,会出现另一个Jlabel
矩形形式的。
我尝试使用paintComponent
orpaint
不幸的是,它不适用于我的程序。paintComponent
所以我不得不认为除了和/或之外还有其他方法paint
。
目的是用名称标记图像的某个部分,例如在 Facebook 中。
哇。
根据 Pace 对问题的描述,您将不得不执行以下操作(我认为):
图片必须直接绘制在 JPanel 上。这样当有人点击图片时,您可以通过 JPanel 动作监听器获取鼠标 x 和 y 坐标。
然后,您将创建一个具有透明 JPanel 的 JDialog,该 JDialog 具有一个边框、一个名称文本框和一个 OK 按钮。(不妨将所有内容放在一个对话框窗口中。) JDialog 将是可移动的,但您将不得不创建一个 JDialog 侦听器来跟踪左上边缘或中心的 x 和 y 坐标JDialog中的透明JPanel。
JDialog JPanel 不会真正透明。您必须通过注意 JDialog JPanel 在图片 JPanel 上的位置,并将图像的一部分从图片 JPanel 复制到 JDialog JPanel 来创建透明的错觉。
与让 JDialog 正常工作相比,其余部分应该相当简单。
编辑添加:这是 JPanel 的扩展,它将直接在 JPanel 上绘制图片并处理鼠标按下事件。
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.MouseEvent;
import javax.swing.JPanel;
import javax.swing.event.MouseInputAdapter;
public class PicturePanel extends JPanel {
private static final long serialVersionUID = 1L;
protected Image picture;
public PicturePanel(Image picture) {
this.picture = picture;
createPartControl();
}
protected void createPartControl() {
new JPanel();
int width = picture.getWidth(getParent());
int height = picture.getHeight(getParent());
addMouseListener(new CoordinateListener());
setPreferredSize(new Dimension(width, height));
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
int width = picture.getWidth(getParent());
int height = picture.getHeight(getParent());
g.drawImage(picture, 0, 0, width, height, null);
}
public class CoordinateListener extends MouseInputAdapter {
@Override
public void mousePressed(MouseEvent event) {
int x = event.getX();
int y = event.getY();
System.out.println("(" + x + ", " + y + ")");
}
}
}