Search code examples
javaswingborderborder-layout

BorderLayout showing border lines


I am not very good in Java GUI and needs to seek help.

I intend to add images at the west of my BorderLayout, center to be my contents and buttons at the bottom.

I created an empty border to make some paddings between my south panel and my west and center panels. Now I just want to add a line across on top of the south border.

As shown in the screenshot below, there's a line between the west panel and center panel as well, how can I remove that line and maintain the line across on top of the south panel?

Attached is my code:

enter image description here

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class test {
    public static void main(String[] args) { 

        JPanel panel1 = new JPanel(new BorderLayout());
        JPanel panel2 = new JPanel(new FlowLayout());
        JPanel panel3 = new JPanel(new FlowLayout());
        JPanel panel4 = new JPanel(new FlowLayout());

        JFrame frame = new JFrame();

        panel2.add( new JLabel( "WEST <will be adding image here>" ));
        panel3.add( new JLabel( "CENTER <contents>"));  
        panel4.add( new JLabel( "SOUTH <will be adding buttons>" ));

        panel1.add(panel2, BorderLayout.WEST);
        panel1.add(panel3, BorderLayout.CENTER);
        panel1.add(panel4, BorderLayout.SOUTH);

        panel2.setBorder(BorderFactory.createRaisedBevelBorder());
        panel3.setBorder(BorderFactory.createRaisedBevelBorder());      
        panel4.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));

        frame.add(panel1); 
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.pack();
        frame.setSize(510,390);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
        frame.setResizable(false);
    }
}

Solution

  • To remove the border between WEST and CENTER, just remove their borders

    panel2.setBorder(BorderFactory.createRaisedBevelBorder());
    panel3.setBorder(BorderFactory.createRaisedBevelBorder());
    

    If you want to retain their border with the frame's edge, then add a border to panel1 instead.

    As for SOUTH, if you want "to add a line across on top of the south border" and keep the empty border, use:

    panel4.setBorder(BorderFactory.createCompoundBorder(
           BorderFactory.createEmptyBorder(10, 10, 10, 10),
           BorderFactory.createMatteBorder(2, 0, 0, 0, Color.BLACK)));
    

    or createRaisedBevelBorder() instead of createMatteBorder.

    Remember that you can switch the order of the borders and their style. See the tutorial for more info.

    Inner: matte, outer: empty Inner: empty, outer: matte