Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I align components in a JPanel to the left?

I have created a layout for a basic text editor, I would like the top bar to have the buttons alligned to the left, the top bar is a JPanel and it is using the FlowLayout manager. It is inside of a grid using the GridBag layout manager. Any suggestions?

import java.awt.*;
import javax.swing.*;

public class GridTest {
private static JButton firstButton, secondButton, thirdButton;
private static JPanel panel, sidebar, infoPanel;
private static JTextArea textArea;

public static void addComponentsToPane(Container container) {
    container.setLayout(new GridBagLayout());
    GridBagConstraints c = new GridBagConstraints();

    firstButton = new JButton("Button 1");
    secondButton = new JButton("Button 2");
    thirdButton = new JButton("Button 3");

    panel = new JPanel(new FlowLayout());
    sidebar = new JPanel(new FlowLayout());
    infoPanel = new JPanel(new FlowLayout());

    textArea = new JTextArea("This is some generic text!");

    c.fill = GridBagConstraints.HORIZONTAL;
    c.ipady = 0; 
    c.weighty = 0;
    c.weightx = 1;
    c.gridx = 0;
    c.gridwidth = 3;
    c.gridy = 0;
    c.anchor = GridBagConstraints.LINE_START; 
    container.add(panel, c);

    panel.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
    panel.setBorder(BorderFactory.createLineBorder(Color.black));
    panel.add(firstButton);
    panel.add(secondButton);
    panel.add(thirdButton);

    c.fill = GridBagConstraints.BOTH;
    c.ipady = 300; 
    c.ipadx = 100;
    c.weighty = 1;
    c.weightx = 0;
    c.gridx = 0;
    c.gridheight = 2;
    c.gridwidth = 1;
    c.gridy = 1;
    container.add(sidebar, c);

    sidebar.setBorder(BorderFactory.createLineBorder(Color.black));

    c.fill = GridBagConstraints.BOTH;
    c.ipady = 40;      
    c.weightx = 1;
    c.weighty = 1;
    c.gridwidth = 2;
    c.gridheight = 1;
    c.gridx = 1;
    c.gridy = 1;
    container.add(textArea, c);

    textArea.setFont(new Font("Serif", Font.ITALIC, 16));
    textArea.setLineWrap(true);
    textArea.setWrapStyleWord(true);

    c.fill = GridBagConstraints.HORIZONTAL;
    c.ipady = 20; 
    c.weighty = 0;
    c.weightx = 0;
    c.anchor = GridBagConstraints.PAGE_END; 
    c.gridx = 1;
    c.gridwidth = 2;
    c.gridy = 2;
    container.add(infoPanel, c);

    infoPanel.setBorder(BorderFactory.createLineBorder(Color.black));
}


private static void createAndShowGUI() {
    JFrame frame = new JFrame("Grid test");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    addComponentsToPane(frame.getContentPane());
    frame.setSize(800,600);
    frame.setVisible(true);
}

public static void main(String[] args) {
    javax.swing.SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            createAndShowGUI();
        }
    });
}
}
like image 816
Joshua Alcock Avatar asked Dec 26 '13 02:12

Joshua Alcock


People also ask

How do I align a JPanel to the left?

//To align it to the left p. add(b, BorderLayout. WEST); //To align it to the right p. add(b, BorderLayout.

How do I center a JPanel screen?

If you want to let the frame appear at the center of your screen, you can set the location by: frame. setLocationRelativeTo(null); Note that you would want to invoke the above after you set the size (or pack() ) your frame.


1 Answers

Consider using a JToolBar instead of a JPanel, as it has it's own layout manager, which, basically, does this any way.

Tool BarTool bar

Images from following tutorial...

Check out How to use Tool Bars for more details

like image 112
MadProgrammer Avatar answered Nov 14 '22 21:11

MadProgrammer