如何创建一个JPanel矩形?

时间:2011-12-01 09:41:49

标签: java swing jlabel paintcomponent

我将图片作为JLabel,我想要点击JLabel时,会出现另一个Jlabel形式的矩形。

我尝试使用paintComponentpaint,但不幸的是,它对我的​​程序无效。因此,除了paintComponent和/或paint之外,我还必须考虑其他方式。

目标是标记具有名称的图像的某个部分,就像在Facebook中一样。

1 个答案:

答案 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 + ")");
        }
    }

}