0

我有一个图片,JLabel我想要做的是当我点击 时JLabel,会出现另一个Jlabel矩形形式的。

我尝试使用paintComponentorpaint不幸的是,它不适用于我的程序。paintComponent所以我不得不认为除了和/或之外还有其他方法paint

目的是用名称标记图像的某个部分,例如在 Facebook 中。

4

1 回答 1

0

哇。

根据 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 + ")");
        }
    }

}
于 2011-12-01T17:30:52.260 回答