user3353723
user3353723

Reputation: 219

How to implement layout?

I have a GUI program which includes JLabels and JButtons and basically I want a layout that would help me display them as follows:

Label1     Button1
Label2     Button2
Label3     Button3
.....
 

Is there a layout that would allow me to achieve the above result?

I have looked at this example but is too complex and was wondering if there is anything automated that I can use?

Upvotes: 0

Views: 73

Answers (4)

AdamK
AdamK

Reputation: 178

This is just for simplicity, and for your question. GUI is really dependent on what you would like to do and is really a thing that can be hardly automated..., and i don't think you only want those 6 elements on your GUI, but theoretically this will do it:

import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class GUITest {

    private Box labelbox = new Box(BoxLayout.Y_AXIS); 
    //Y_AXIS means they are placed vertically in the box
    private Box buttonbox = new Box(BoxLayout.Y_AXIS);
    private JFrame frame = new JFrame();
    private JPanel panel = new JPanel();

    public void makeGUI1() {
        for (int i = 1; i <= 3; i++) { 
            //if you want to save the references, you should make 
            //an ArrayList<JLabel> and add each of them to it
            JLabel label = new JLabel("Label " + i);
            labelbox.add(Box.createVerticalStrut(5)); 
            //these are for giving the labels some extra space 
            //between them vertically to be in line with the buttons
            labelbox.add(label);
            labelbox.add(Box.createVerticalStrut(10)); //these are too

        }
        for (int i = 1; i <= 3; i++) { 
            //if you want to save the references, you should make 
            //an ArrayList<JButton> and add each of them to it
            JButton button = new JButton("Button " + i);
            buttonbox.add(button);
        }
        panel.add(labelbox, BorderLayout.EAST); 
        //you can find picture of each constant: 
        //http://download.java.net/jdk7/archive/b123/docs/api/java/awt/BorderLayout.html
        panel.add(buttonbox, BorderLayout.WEST);
        frame.add(panel);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                GUITest guitest = new GUITest();
                guitest.makeGUI1();
            }
        });
    }
}

Upvotes: 2

Andrew Thompson
Andrew Thompson

Reputation: 168825

This is one of the few things for which I'd recommend (a utility method and) GroupLayout as seen in this answer.

Upvotes: 3

user3673127
user3673127

Reputation: 1

You can also use obj.setBounds(LeftSpaceParameter,TopSpaceParameter) with which you can place the gui elements or objects at any position of your choice. You need to put the default layout to null yet gridLayout is much easier. .

Upvotes: -1

Aniket Thakur
Aniket Thakur

Reputation: 68935

You can use GridLayout. Documentation here.

Upvotes: 2

Related Questions