Search code examples
javaswingalignmentlayout-managerboxlayout

Align to the limit Components in a JPanel Swing


I need to totally align components to the JTextArea components, I am currently using a BoxLayout and I already used the setAlignmentX and setHorizontalAlignment to LEFT but it's not working. Here I upload an image to make clearer what I mean. For example look at "+ Pla PLAMARC" it's clearly not aligned with the text area component.

Components not aligned with JTextArea components

By the moment this is the code:

//Declarations
private JLabel nomPla;
private JTextArea infoPla;
private JScrollPane textAreaScroll;

//Inside the constructor
nomPla = new JLabel();
infoPla = new JTextArea(2, 50);
textAreaScroll = new JScrollPane(infoPla);

this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));

nomPla.setAlignmentX(Component.LEFT_ALIGNMENT);
nomPla.setHorizontalAlignment(nomPla.LEFT);
textAreaScroll.setAlignmentX(Component.CENTER_ALIGNMENT);

this.setBorder(new EmptyBorder(new Insets(25, 25, 25, 25)));

this.add(nomPla, BorderLayout.NORTH);
this.add(textAreaScroll, BorderLayout.NORTH); //Orientacions

I am clearly telling nomPla to be on the leftside, but this is not the same as the JTextArea.

How is this done then?


Solution

  • I already used the setAlignmentX and

    The setAlignmentX(...) needs to be applied to all the components you add to the BoxLayout if you want all to be left aligned with respect to the BoxLayout.

    Edit:

    I just want the labels to be on the left side, not the JTextArea components..

    Then you need to use a wrapper panel for the BoxLayout Panel.

    For example:

    JPanel wrapper = new JPanel( new FlowLayout(FlowLayout.CENTER) );
    wrapper.add(yourBoxLayoutPanel);
    frame.add(wrapper);
    

    Now all the components in the BoxLayout will be left aligned and the BoxLayout panel will be center aligned in the wrapper panel.

    Layout management is about nesting panels with different layout manager to achieve you desired effect.