Add other components to JFrame with background

后端 未结 2 610
甜味超标
甜味超标 2020-12-21 02:37

I want to add a background image to my JFrame but when I do it using the code below, I\'m unable to add other elements like JLabel or JTextField.

ImageIco         


        
2条回答
  •  庸人自扰
    2020-12-21 02:41

    Like this?

    Addendum: "Normally you would invoke super.paintComponent(g) first, but since the image will cover the entire background there is no need to do this."—camickr

    Addendum: See also the opacity property.

    import java.awt.Dimension;
    import java.awt.EventQueue;
    import java.awt.Graphics;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import javax.imageio.ImageIO;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    
    public class Imager {
    
        public static void main(String[] args) {
            EventQueue.invokeLater(new Runnable() {
    
                @Override
                public void run() {
                    JFrame frame = new JFrame();
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    frame.add(new ImagePanel("image.jpg"));
                    frame.pack();
                    frame.setVisible(true);
                }
            });
        }
    
        private static class ImagePanel extends JPanel {
    
            BufferedImage img;
    
            ImagePanel(String name) {
                this.setToolTipText(name);
                this.add(new JLabel(name));
                try {
                    img = ImageIO.read(new File(name));
                    this.setPreferredSize(new Dimension(
                        img.getWidth(), img.getHeight()));
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
    
            @Override
            protected void paintComponent(Graphics g) {
                // super.paintComponent(g);
                g.drawImage(img, 0, 0, this.getWidth(), this.getHeight(), null);
            }
        }
    }
    

提交回复
热议问题