有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何创建一个JPanel矩形?

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

我试过使用paintComponentpaint,但不幸的是,它对我的程序不起作用。所以我不得不认为,除了paintComponent和/或paint之外,还有其他方法

其目的是用名字标记图像的某个部分,就像在Facebook上一样


共 (1) 个答案

  1. # 1 楼答案

    根据佩斯对问题的描述,你必须做以下几点(我认为):

    • 这幅画必须直接画在JPanel上。这样,当有人点击图片时,你可以通过JPanel action listener获得鼠标的x和y坐标

    • 然后,您将创建一个带有透明JPanel的JDialog,该JPanel有一个边框、一个名称文本框和一个OK按钮。(不妨将所有内容放在一个对话框窗口中。)JDialog是可移动的,但是您必须创建一个JDialog侦听器,它可以跟踪JDialog中透明JPanel左上角或中心的x和y坐标

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