Why is my Jpanel borderlayout working as expected?

I add 2 elements to JPanel, JLabel and JButton. I would like them to display one on top of each other, so I added them using BorderLayout.NORTH and SOUTH.

The problem is that JLabel and JButton are sitting next to each other horizontally to each other, and not above each other as expected. The problem may be due to the fact that I also add to other panels to the frame using borderlayout, as shown below.

Here is the SSCE to demonstrate my problem. You will notice that if you expand the window, you will see JButton to the left of JLabel.

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Question {
    /**
     * @param args
     */
    public static void main(String[] args) {
        gui();
    }

    public static void gui() {

        final JFrame theFrame = new JFrame();
        theFrame.setSize(550, 290);

        theFrame.setLocationRelativeTo(null);

        // options for the JComboBox
        String[] options = { ("1"), ("2"), ("3") };

        final JPanel thePanel = new JPanel();
        JLabel aMessage = new JLabel(
                "<html>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus tempus<br> lacus eu ante vestibulum tincidunt. Donec venenatis rhoncus justo sit amet <br>gravida. Pellentesque habitant morbi tristique senectus et netus et malesuada<br>est ac mattis. Donec lobortis rhoncus quam. In at vulputate ipsum<br>to fix. Phasellus tempus lacus eu ante vestibulum tincidunt. Donec venenatis rhoncus<br>turpis quam sagittis arcu, non pulvinar purus leo ege.<br><br><br></html>");
        aMessage.setVisible(true);

        JButton theButton = new JButton();
        theButton
                .setText("<HTML><FONT color=\"#000099\"><U>Click here</U></FONT>"
                        + " if you would like to view some file.</HTML>");

        theButton.setBorderPainted(false);
        theButton.setOpaque(false);
        theButton.setBackground(Color.WHITE);
        theButton.setVisible(true);

        thePanel.add(aMessage, BorderLayout.NORTH);
        thePanel.add(theButton, BorderLayout.SOUTH);

        // create second panel
        final JPanel secondPanel = new JPanel();
        JLabel bMessage = new JLabel("Here another Jlabel");
        final JComboBox cBox = new JComboBox(options);
        // would be nice to get bmessage + cBox left aligned
        secondPanel.add(bMessage);
        secondPanel.add(cBox);

        // create third panel
        final JPanel thirdPanel = new JPanel();
        JLabel cMessage = new JLabel("Here a third message");
        String newString = ("Hello");
        JTextField stringInput = new JTextField(newString);
        stringInput.setPreferredSize(new Dimension(250, 20));
        thirdPanel.add(cMessage);
        thirdPanel.add(stringInput);


        JButton lastButton = new JButton("A Button");

        thirdPanel.add(cMessage);
        thirdPanel.add(stringInput);
        thirdPanel.add(lastButton);

        theFrame.add(thePanel, BorderLayout.NORTH);
        theFrame.add(thirdPanel, BorderLayout.SOUTH);
        theFrame.add(secondPanel, BorderLayout.CENTER);

        theFrame.setVisible(true);
    }

}
+4
source share
1 answer

thePanel JPanel? : , FlowLayout. : , , setLayout(...)

.

thePanel.setLayout(new BorderLayout());
+7

All Articles