Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Alignment of components in a gui window

I have got a window that looks like window1 and I would like it to look like window2:

enter image description here

This is my code:

    String q = "Have you used GUI before?";     
    JLabel textLabel2 = new JLabel(
        "<html><div style=\"text-align: center;\">" + q + "</html>", SwingConstants.CENTER);
    add(textLabel2, BorderLayout.NORTH);

    JPanel radioPanel = new JPanel();                                           
    add(radioPanel, BorderLayout.CENTER);

    JPanel btnPanel = new JPanel();
    add(btnPanel, BorderLayout.SOUTH);

For the radio-buttons, I tried to use GridLayout, but it broke the position of "Yes" and "No". And for the "back" and "next" buttons, horizontal alignment did not work (btnPanel.setAlignmentX(RIGHT_ALIGNMENT);), apparently. Any solutions will be highly appreciated, I'm stuck with this bit way too long. Thanks

--EDIT--
That is working perfectly fine:

btnPanel.setLayout(new BoxLayout(btnPanel, BoxLayout.LINE_AXIS));
btnPanel.setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 10));
btnPanel.add(Box.createHorizontalGlue());

so the buttons problem is solved.
However, still can't get the radio-buttons fixed.

--EDIT 2--
Fixed the background for the radio-buttons using setOpaque(false);

like image 747
Hurdler Avatar asked Feb 23 '23 11:02

Hurdler


2 Answers

What do you mean by it "broke" the position of "yes" and "no" as a GridLayout should work just fine. I'd give it 1 column and 2 (or 0 for variable number of) rows via new GridLayout(0, 1). Be sure that its opaque property is set as false by doing radioPanel.setOpaque(false);. This way it will show the background color of the container that it sits in. You may need to make the JRadioButtons non-opaque as well, I'm not sure.

Your btnPanel could use a BoxLayout and use Box.createGlue() to push the buttons over to the right side.

Most importantly -- if you haven't yet done so, please read the tutorials on use of the Swing layout managers which you can find here.

like image 153
Hovercraft Full Of Eels Avatar answered Mar 06 '23 18:03

Hovercraft Full Of Eels


A couple of things you can do about this. You need to change your LayoutManager. This is not a great task for BorderLayout. You could do nested BoxLayouts. A vertical box that has the vertical fixed height strut, label, vertical fixed height strut, yes radio, vertical fixed strut, no radio, Vertical glue, and the final button panel. Then use your edit in the button panel to horizontally align them. That's one option, but the nesting of the panels is annoying.

Another option go get TableLayout and learn how to use it. TableLayout is one of the best LayoutManagers. It's easy to use, solidly tested, and it makes Swing fun again. You'll never use GridBagLayout ever ever ever again.

http://java.sun.com/products/jfc/tsc/articles/tablelayout/

The final option is use the new GroupLayout. I'm not terribly familiar with it, but it looks pretty easy. And, it doesn't take as much code or nesting unnecessary panels like Box does.

like image 20
chubbsondubs Avatar answered Mar 06 '23 18:03

chubbsondubs