2011-12-01 92 views
0

我把图片作为JLabel而我想要做的是当我点击JLabel时,会出现另一个Jlabel的矩形形式。如何创建一个JPanel矩形?

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

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

+0

这里的最终用例是什么?这实现了什么功能?我倾向于使用未装饰的'JButton'来保存'Image'。至于如何使'矩形'出现,我需要知道这是什么,以提供最好的建议。 –

+0

就像在Facebook中,当我点击我想要一个矩形出现。当你说你使用了未装饰的JButton时,这是否意味着按钮的矩形中有一个矩形孔? – javaBeginner

+0

*“就像在Facebook ..”*我不使用Facebook。 **它提供的功能是什么? *“是否意味着按钮的矩形中有一个矩形孔?”*我的意思是按钮中的图像,而不是*“作为JLabel的图片......单击JLabel”*。 –

回答

0

哇。

基于问题的佩斯的描述,你将不得不做以下的(我认为):

  • 图片将直接在一个JPanel画。当有人点击图片时,可以通过JPanel动作侦听器获得鼠标的x和y坐标。

  • 然后,您将创建一个带有边框,名称文本框和确定按钮的透明JPanel的JDialog。 (也可以把所有东西放在一个对话窗口中。)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 + ")"); 
     } 
    } 

} 
+0

谢谢你的回应,问题是,paintComponent不适用于我的程序。这就是为什么我诉诸使用JLabel的形象。 – javaBeginner

+0

@javaBeginner:编辑我的答案,为您提供绘制图片的JPanel的骨架。 –