I need to set a background image in my program. The structure of the main GUI is:
JFrame that contains – JPanel with BoxLayou that contains… etc
i need to put an image behind the first JPanel, but I don’t know how.
i wrote this code:
JPanel background = new JPanel();
JLabel labl = new JLabel("This is a dummy label this is a dummy label");
background.add(labl);
// TODO insert an image in background.
Component VERT_RA = Box.createRigidArea(new Dimension(0, 10));
Component HORI_RA = Box.createRigidArea(new Dimension(10, 0));
JPanel main = new JPanel();
main.setLayout(new BoxLayout(main, BoxLayout.PAGE_AXIS));
add(background);
add(main);
main.setOpaque(false);
main.add(VERT_RA);
JPanel a = new JPanel();
a.setLayout(new BoxLayout(a, BoxLayout.LINE_AXIS));
main.add(a);
main.add(VERT_RA);
a.add(HORI_RA);
JPanel services = new JPanel();
services.setLayout(new BoxLayout(services, BoxLayout.PAGE_AXIS));
a.add(services);
a.add(HORI_RA);
JPanel right = new JPanel();
right.setLayout(new BoxLayout(right, BoxLayout.PAGE_AXIS));
a.add(right);
a.add(HORI_RA);
JLabel lbl = new JLabel("SERVIZI");
lbl.setFont(new Font("SansSerif", Font.BOLD, 30));
lbl.setAlignmentX(Component.CENTER_ALIGNMENT);
lbl.setPreferredSize(new Dimension(100, 100));
services.add(lbl);
but if I run it I can see only the “main” JPanel (the “SERVIZI” label).
I can only see background JPanel if I specify a setSize(x,y) method.
Is there any way to add a background image to my layout, without having to specify dimensions?
I also tried with setLayou(null) but i had to specify dimensions for all components by hand (not useful).
You simply have to override the
getPreferredSize()method for the respective JPanel, and make it return some valid Dimension Object. I guess this example might can help you in that direction :But if you don’t want to use inheritance, in your case, then you can simply add your image to the JLabel and then add your components to the JLabel by setting the Layout for the JLabel, as shown in this example and this example.