14
Swing layouts Lecture 10 Object Oriented Programming Eastern University, Dhaka Md. Raihan Kibria

Oop lecture9 10

Embed Size (px)

Citation preview

Page 1: Oop lecture9 10

Swing layouts

Lecture 10

Object Oriented ProgrammingEastern University, Dhaka

Md. Raihan Kibria

Page 2: Oop lecture9 10

Specifying no layout in JFramepublic class DefaultLayoutDemo {

public static void main(String[] args) { JFrame frame = new JFrame("DefaultLayoutDemo"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//Set up the content pane. frame.add(new JButton("a")); frame.add(new JButton("b"));

//Display the window. frame.pack(); frame.setVisible(true);

}}

Page 3: Oop lecture9 10

Specifying positions of controlspublic class DefaultLayoutDemo {

public static void main(String[] args) { JFrame frame = new JFrame("DefaultLayoutDemo"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//Set up the content pane. frame.add(new JButton("a"), BorderLayout.NORTH); frame.add(new JButton("b"), BorderLayout.SOUTH);

//Display the window. frame.pack(); frame.setVisible(true);

}}

The default layout for JFrame is BorderLayout

Page 4: Oop lecture9 10

BorderLayoutpublic class BorderLayoutDemo {

public static boolean RIGHT_TO_LEFT = false; public static void addComponentsToPane(Container pane) { if (RIGHT_TO_LEFT) { pane.setComponentOrientation( java.awt.ComponentOrientation.RIGHT_TO_LEFT); } JButton button = new JButton("Button 1 (PAGE_START)"); pane.add(button, BorderLayout.PAGE_START); button = new JButton("Button 2 (CENTER)"); button.setPreferredSize(new Dimension(200, 100)); pane.add(button, BorderLayout.CENTER); button = new JButton("Button 3 (LINE_START)"); pane.add(button, BorderLayout.LINE_START); button = new JButton("Long-Named Button 4 (PAGE_END)"); pane.add(button, BorderLayout.PAGE_END); button = new JButton("5 (LINE_END)"); pane.add(button, BorderLayout.LINE_END); }

Page 5: Oop lecture9 10

public static void main(String[] args) { JFrame frame = new JFrame("BorderLayoutDemo"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); addComponentsToPane(frame.getContentPane()); frame.pack(); frame.setVisible(true); }}

If you stretch the frame the center part gets filled by the control in it

Page 6: Oop lecture9 10

BoxLayoutpublic class BoxLayoutDemo { public static void addComponentsToPane(Container pane) { pane.setLayout(new BoxLayout(pane, BoxLayout.Y_AXIS)); addAButton("Button 1", pane); addAButton("Button 2", pane); addAButton("Button 3", pane); addAButton("Long-Named Button 4", pane); addAButton("5", pane); }

private static void addAButton(String text, Container container) { JButton button = new JButton(text); button.setAlignmentX(Component.CENTER_ALIGNMENT); container.add(button); }

public static void main(String[] args) { JFrame frame = new JFrame("BoxLayoutDemo"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); addComponentsToPane(frame.getContentPane()); frame.pack(); frame.setVisible(true); }}

Page 7: Oop lecture9 10

Result

There is no resizing when the frame is stretched out

Page 8: Oop lecture9 10

FlowLayoutpublic class FlowLayoutDemo extends JFrame{ FlowLayout experimentLayout = new FlowLayout(); public FlowLayoutDemo(String name) { super(name); } public void addComponentsToPane(final Container pane) { JPanel compsToExperiment = new JPanel(); compsToExperiment.setLayout(experimentLayout); experimentLayout.setAlignment(FlowLayout.LEADING); //Add buttons to the experiment layout compsToExperiment.add(new JButton("Button 1")); compsToExperiment.add(new JButton("Button 2")); compsToExperiment.add(new JButton("Button 3")); compsToExperiment.add(new JButton("Long-Named Button 4")); compsToExperiment.add(new JButton("5")); //Left to right component orientation is selected by default compsToExperiment.setComponentOrientation( ComponentOrientation.LEFT_TO_RIGHT); pane.add(compsToExperiment, BorderLayout.CENTER); }

Page 9: Oop lecture9 10

public static void main(String[] args) { FlowLayoutDemo frame = new FlowLayoutDemo("FlowLayoutDemo"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.addComponentsToPane(frame.getContentPane()); frame.pack(); frame.setVisible(true);

}}

If we stretch the controls are still pinned to the left because of this: experimentLayout.setAlignment(FlowLayout.LEADING);

Page 10: Oop lecture9 10

GridLayoutpublic class GridLayoutDemo {

public static void addComponentsToPane(Container pane) { pane.setLayout(new GridLayout(3, 2)); JButton b1 = new JButton("First"); pane.add(b1); b1 = new JButton("Second"); pane.add(b1); b1 = new JButton("Third"); pane.add(b1); b1 = new JButton("Fourth"); pane.add(b1); b1 = new JButton("Fifth"); pane.add(b1); b1 = new JButton("Sixth"); pane.add(b1); }

public static void main(String[] args) {

JFrame frame = new JFrame("GridBagLayoutDemo"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); addComponentsToPane(frame.getContentPane()); frame.pack(); frame.setVisible(true); }}

Page 11: Oop lecture9 10

Result

3 columns and 2 rows as set in: pane.setLayout(new GridLayout(3, 2));

Page 12: Oop lecture9 10

GridBagLayoutpublic class GridBagLayoutDemo {

public static void addComponentsToPane(Container pane) {

JButton button; pane.setLayout(new GridBagLayout()); GridBagConstraints c = new GridBagConstraints();

button = new JButton("Button 1"); c.gridx = 0; c.gridy = 0; pane.add(button, c);

button = new JButton("Button 2"); c.gridx = 1; c.gridy = 0; pane.add(button, c);

button = new JButton("Button 3"); c.gridx = 2; c.gridy = 0; pane.add(button, c);

button = new JButton("Long-Named Button 4"); c.gridx = 0; c.gridy = 1; pane.add(button, c);

Page 13: Oop lecture9 10

button = new JButton("5"); c.gridx = 1; c.gridy = 2; pane.add(button, c); }

public static void main(String[] args) { JFrame frame = new JFrame("GridBagLayoutDemo"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); addComponentsToPane(frame.getContentPane()); frame.pack(); frame.setVisible(true); }}

GridBagLayout is very flexible layout

Page 14: Oop lecture9 10

Questions

What is the most flexible of these layouts Whichone is easy to implement Which layout to choose when you want

your control to take up as much space as possible

Interested in more? - GroupLayout SpringLayout