How to set Jframe Background Image in GroupLayout Java

前端 未结 3 381
春和景丽
春和景丽 2021-01-23 06:26

Am trying to set a background image for my frame but it does not work. I tried this link:

Setting background images in JFrame

The code:

setConten         


        
相关标签:
3条回答
  • 2021-01-23 07:03

    I've an inkling the problem may lie with

    setContentPane(new JLabel(new ImageIcon(ImageIO.read(new File("/Images/about.png")))));
    

    Try removing the leading slash in the file path, as this may be interpreted differently based on the OS:

    setContentPane(new JLabel(new ImageIcon(ImageIO.read(new File("Images/about.png")))));
    
    0 讨论(0)
  • 2021-01-23 07:07

    The basic concept looks fine.

    The only possible reason you might be getting problems is if the image doesn't exist.

    It looks look you are trying to reference an image that should exist within the context of the Jar

    Instead of

    ImageIO.read(new File("/Images/about.png"))
    

    Try

    ImageIO.read(getClass().getResource("/Images/about.png"))
    

    Instead.

    Also, don't swallow exceptions, make sure all exceptions are been logged at the very least

    enter image description here

    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.EventQueue;
    import java.awt.HeadlessException;
    import java.io.File;
    import java.io.IOException;
    import javax.imageio.ImageIO;
    import javax.swing.ImageIcon;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.UIManager;
    import javax.swing.UnsupportedLookAndFeelException;
    
    public class BackgroundFrameImage {
    
        public static void main(String[] args) {
            new BackgroundFrameImage();
        }
    
        public BackgroundFrameImage() {
            EventQueue.invokeLater(new Runnable() {
                @Override
                public void run() {
                    try {
                        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                    } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    }
    
                    try {
                        JLabel label = new JLabel(new ImageIcon(ImageIO.read(...))));
    
                        JFrame frame = new JFrame("Testing");
                        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                        frame.setContentPane(label);
                        frame.setLayout(new BorderLayout());
                        JLabel text = new JLabel("Hello from the foreground");
                        text.setForeground(Color.WHITE);
                        text.setHorizontalAlignment(JLabel.CENTER);
                        frame.add(text);
                        frame.pack();
                        frame.setLocationRelativeTo(null);
                        frame.setVisible(true);
                    } catch (IOException | HeadlessException exp) {
                        exp.printStackTrace();
                    }
                }
            });
        }
    
    }
    
    0 讨论(0)
  • 2021-01-23 07:07

    Put everything on an IPanel and put the IPanel on the JFrame. Tweak as necessary to suit your needs.

    public class IPanel extends JPanel {
    private static final long serialVersionUID = 1L;
    private Image             imageOrg         = null;
    private Image             image            = null;
    {
        addComponentListener(new ComponentAdapter() {
            @Override
            public void componentResized(final ComponentEvent e) {
                final int w = IPanel.this.getWidth();
                final int h = IPanel.this.getHeight();
                image = w > 0 && h > 0 ? imageOrg.getScaledInstance(w, h, Image.SCALE_SMOOTH) : imageOrg;
                IPanel.this.repaint();
            }
        });
    }
    
    public IPanel(final Image i) {
        imageOrg = i;
        image = i;
    }
    
    @Override
    public void paintComponent(final Graphics g) {
        super.paintComponent(g);
        if (image != null)
            g.drawImage(image, 0, 0, null);
    }
    }
    

    Example:

        final JPanel j = new IPanel(image);
        j.setLayout(new FlowLayout());
        j.add(new JButton("YoYo"));
        j.add(new JButton("MaMa"));
        j.add(new JLabel(icon));
    

    Produces:

    enter image description here

    0 讨论(0)
提交回复
热议问题