在图像上添加组件

Adding components over image

我一直在网上寻找如何在图像上添加组件的解决方案。我试过这个:

    setContentPane(new JComponent(){
        @Override
        protected void paintComponent(Graphics g){
            URL url = ...;
            if(url==null){
                //... Irelevant
                return;
            }
            try {
                BufferedImage img = ImageIO.read(url);
                g.drawImage(img,0 ,0, this);
                super.paintComponents(g);
            } catch (IOException e) {
                //... Irelevant
                e.printStackTrace();
                return;
            }

        }
    });
    nameLabel=new JLabel("<html><body>"+Main.translateColorsToHTML(name)+"</body></html>");
    nameLabel.setAlignmentX(Component.LEFT_ALIGNMENT);
    nameLabel.setVisible(true);
    add(nameLabel);

没有用,所以我试过了:

    URL url = ...;//Fetching the url
    if(url==null){
        //... Unrelevant
        return;
    }
    try {
        BufferedImage img = ImageIO.read(url);
        invImg = new JLabel(new ImageIcon(img));
        invImg.setMaximumSize(new Dimension(340, 250));
        setContentPane(invImg);
    } catch (IOException e) {
        e.printStackTrace();
        return;
    }

然后将组件添加到内容窗格/框架本身。 我完全不知道该怎么做,我们将不胜感激。 提前致谢!

我找到了一个很好用的解决方案:

BufferedImage img = ImageIO.read(url);
invImg = new JLabel();
invImg.setIcon(new ImageIcon(img));
invImg.setLayout(new BoxLayout(invImg, BoxLayout.Y_AXIS));
setContentPane(invImg);

嘿,介意在你的 JFrame 上添加一个 jPanel 吗? (这几乎总是一个更好的主意)

在你的 JFrame 上添加一个 jPanel,然后在上面画画。

Override jPanelpaint(Graphics2D g) 方法(继承自 JComponent)并像这样绘制图像

yourPanel = new javax.swing.JPanel(){
            @Override
            public void paint(Graphics g) {
                super.paint(g);
                g.drawImage(yourImage, null, x, y);
            }
}