我将图片作为JLabel
,我想要点击JLabel
时,会出现另一个Jlabel
形式的矩形。
我尝试使用paintComponent
或paint
,但不幸的是,它对我的程序无效。因此,除了paintComponent
和/或paint
之外,我还必须考虑其他方式。
目标是标记具有名称的图像的某个部分,就像在Facebook中一样。
答案 0 :(得分:0)
哇。
根据Pace对问题的描述,你将不得不做以下事情(我认为):
图片必须直接在JPanel上绘制。当有人点击图片时,您可以通过JPanel动作监听器获取鼠标x和y坐标。
然后,您将创建一个带有透明JPanel的JDialog,该JPanel具有边框,名称的文本框和OK按钮。 (也可以在一个对话框窗口中将所有内容放在一起。)JDialog将是可移动的,但您将不得不创建一个JDialog侦听器来跟踪左上边缘或中心的x和y坐标。 JDialog中透明的JPanel。
JDialog JPanel实际上不是透明的。你必须通过在图片JPanel上注明JDialog 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 + ")");
}
}
}