java swing - lecture 3 layout management

26
1 Java Swing - Lecture 3 Layout Management Boriana Koleva ([email protected])

Upload: aine

Post on 27-Jan-2016

42 views

Category:

Documents


0 download

DESCRIPTION

Java Swing - Lecture 3 Layout Management. Boriana Koleva ([email protected]). Where are we up to?. Last Time: Containers (Frames and Dialogs) Hierarchy Root Panes Layered Panes Content Panes Glass Panes Components Lots of ‘em… Today The exciting topic of “Layout Management”. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Java Swing - Lecture 3 Layout Management

1

Java Swing - Lecture 3Layout Management

Boriana Koleva([email protected])

Page 2: Java Swing - Lecture 3 Layout Management

G5BUID - Java Swing - 2005

2

Where are we up to?

Last Time:• Containers (Frames and Dialogs)

Hierarchy Root Panes Layered Panes Content Panes Glass Panes

• Components Lots of ‘em…

Today• The exciting topic of “Layout Management”

Page 3: Java Swing - Lecture 3 Layout Management

G5BUID - Java Swing - 2005

3

Laying out components

• Manage realized components• Determine size and position• Each container has a layout manager

(usually)

Page 4: Java Swing - Lecture 3 Layout Management

G5BUID - Java Swing - 2005

4

Layout managers –general aspects

• Creating a layout manager• Consulting managers• Types of managers• Choosing managers• Other features of component layout

• All Covered very well here: http://java.sun.com/docs/books/tutorial/uiswing/layout/

using.html

Page 5: Java Swing - Lecture 3 Layout Management

G5BUID - Java Swing - 2005

5

Creating a layout manager

• Default layout managers JFrame, JDialog, JApplet have BorderLayout JPanel has FlowLayout

Except when used as a Content Pane (Border Layout)

• Setting the layout manager for a container JFrame frame = new JFrame();

frame.setLayout(new FlowLayout());

JPanel contentPane = new JPanel();

contentPane.setLayout(new BorderLayout());

Page 6: Java Swing - Lecture 3 Layout Management

G5BUID - Java Swing - 2005

6

Consulting layout managers (1)

• Consulted automatically when container may need to change its appearance.

• These methods result in consultation, but DON’T trigger new layout add(), remove(), removeAll() getAlignmentX(), getAlignmentY() getPreferredSize(), getMinimumSize(), getMaximumSize()

Page 7: Java Swing - Lecture 3 Layout Management

G5BUID - Java Swing - 2005

7

Consulting layout managers (2)

• These methods actually result in the manager performing layout. JFrame.pack();

Causes this Window to be sized to fit the preferred size and layouts of its subcomponents.

JFrame.show() & JFrame.setVisible(true); Shows the component

JComponent.revalidate(); This method will automatically be called on this component when

a property value changes. Looks for all dependent components and calls validate() on them. Validate() causes a container to lay out its subcomponents again

Page 8: Java Swing - Lecture 3 Layout Management

G5BUID - Java Swing - 2005

8

Layout managers - types

• BorderLayout• BoxLayout• FlowLayout• GridLayout• GridBagLayout• CardLayout

Page 9: Java Swing - Lecture 3 Layout Management

G5BUID - Java Swing - 2005

9

BorderLayout

• Five areas NORTH, SOUTH, EAST, WEST and CENTER Not all areas must be used Do not assume a default area for components Centre gets as much area as possible

• Specify location as argument of add method pane.setLayout(new BorderLayout()); pane.add(new JButton(“Button 1 (NORTH)”), BorderLayout.NORTH);

• Setting gaps between components (default = 0) BorderLayout.setHgap(int gap); BorderLayout.setVgap(int gap); BorderLayout(int horizontalGap, int verticalGap) - Constructor

Page 10: Java Swing - Lecture 3 Layout Management

G5BUID - Java Swing - 2005

10

BoxLayout (1)

• Components on top / next to each other Direction is your choice

• Tries to size components at preferred height for Y_AXIS or width for X_AXIS

• Width as largest component width See above picture

Page 11: Java Swing - Lecture 3 Layout Management

G5BUID - Java Swing - 2005

11

BoxLayout (2)

• Space fillers Rigid - fixed-size space between two components

Glue - taking up no space unless you pull apart the components that it's sticking to. Helps reposition extra space (default is at end)

Custom - Use this to specify a component with whatever minimum, preferred, and maximum sizes you want

Page 12: Java Swing - Lecture 3 Layout Management

G5BUID - Java Swing - 2005

12

BoxLayout (3)

• Component sizes Respect Max, Min and Preferred Sizes of

components

• Alignment Comes into play when not all components are the same width Can specify Left (0), Centre (0.5) or Right (1). Or Top Middle

Bottom

• If you are having layout problems, first treat as an Alignment issue, then examine sizes.

Page 13: Java Swing - Lecture 3 Layout Management

G5BUID - Java Swing - 2005

13

FlowLayout

• Very simple - JPanel’s default• Components in row(s)• At preferred size• Alignment

FlowLayout.LEFT FlowLayout.CENTRE FlowLayout.RIGHT

• Gaps Default = 5 Specifying - setter hGap vGap methods or via

constructor

Page 14: Java Swing - Lecture 3 Layout Management

G5BUID - Java Swing - 2005

14

GridLayout

• Grid of cells - all same size• Components take all space in a cell• Gaps

default = 5 use setter methods hGap and vGap or via arguments to constructor

• Re-sizing Cells resize to be as large as possible in given

window / container

Page 15: Java Swing - Lecture 3 Layout Management

G5BUID - Java Swing - 2005

15

GridBagLayout (1)

• Very flexible (and complex!)• Rows can have different heights• Columns can have different lengths• Uses cells in a grid

GridBagLayout gridbag = new GridBagLayout();GridBagConstraints c = new GridBagConstraints();

JPanel pane = new JPanel();pane.setLayout(gridbag);

//--- For each component to be added to this container://--- ...Create the component...//--- ...Set instance variables in the GridBagConstraints instance...gridbag.setConstraints(theComponent, c);pane.add(theComponent);

Page 16: Java Swing - Lecture 3 Layout Management

G5BUID - Java Swing - 2005

16

GridBagLayout (2)

• Constraints set in an instance of a gridBagConstraints Object gridx and gridy - The row and column of the upper left of the component Anchor - Where to display within cell when component is smaller than it fill - How to size component when cell is larger than components

requested size insets - External padding - min space between component and cell

edges ipadx, ipady - Internal padding - What to add to min size of components weightx and weighty - How to distribute extra space (padding) gridwidth and gridheight - Number of columns or rows the component

uses More explanation here:

http://java.sun.com/docs/books/tutorial/uiswing/layout/gridbagConstraints.html

• Example explained very well here: http://java.sun.com/docs/books/tutorial/uiswing/layout/gridbagExample.html

Page 17: Java Swing - Lecture 3 Layout Management

G5BUID - Java Swing - 2005

17

CardLayout

• Manages objects (usually JPanels) in sets

• Works much like tabbed pane• Choose cards by

Asking for card in order added to container

Going backwards or forwards Specifying card by name

Page 18: Java Swing - Lecture 3 Layout Management

G5BUID - Java Swing - 2005

18

Choosing layout managers (1)

• In order to display a component in as much space as it can get, consider: BorderLayout

Component in centre

GridBagLayout fill=GridBagConstraints.BOTH

BoxLayout Component specifies very large

preferred/maximum sizes

Page 19: Java Swing - Lecture 3 Layout Management

G5BUID - Java Swing - 2005

19

Choosing layout managers (2)

• To display a few components in a compact row: JPanel’s default FlowLayout BoxLayout

• Display a few components of the same size in rows and columns GridLayout

Page 20: Java Swing - Lecture 3 Layout Management

G5BUID - Java Swing - 2005

20

Choosing layout managers (3)

• Display a few components in a row or column, with different spacing between them and custom component sizes BoxLayout

• Display a complex layout that has many components GridBagLayout Using JPanel grouping and hierarchies

Page 21: Java Swing - Lecture 3 Layout Management

G5BUID - Java Swing - 2005

21

Layout managers - other layout features

• Absolute positioning of components When How

• Customising layout managers When How

Page 22: Java Swing - Lecture 3 Layout Management

G5BUID - Java Swing - 2005

22

Absolute positioning (1)

• Don’t do it; unless…

component size isn’t affected by container size or font & look’n’feel changes e.g. desktop panes containing internal frames

custom container performs size & position calculations particular to container e.g. split panes

Page 23: Java Swing - Lecture 3 Layout Management

G5BUID - Java Swing - 2005

23

Absolute positioning (2)

• Key points from NoneWindow.java

Instruct window to use no Layout: .contentPane.setLayout(null);

Set components size and position with XYZ.setBounds(x, y, width, height);

Set window size with: window.setSize(x, y);

Page 24: Java Swing - Lecture 3 Layout Management

G5BUID - Java Swing - 2005

24

Custom layout managers (1)

• Ensure no existing manager does the job GridBagLayout / BoxLayout

Layout manager downloads If your trying to do it, chances are

someone else has done it already…• DECLARE use of external code in

coursework

Page 25: Java Swing - Lecture 3 Layout Management

G5BUID - Java Swing - 2005

25

Custom layout managers (2)

• Create class which implements Layout Manager interface e.g. public class myManager implements LayoutManager

• Must have 5 methods required by interface void addLayoutComponent(String, Component) void removeLayoutComponent(Component) Dimension preferredLayoutSize(Container) Dimension minimumLayoutSize(Container) void layoutContainer(Container)

• See below URL for more documentation http://java.sun.com/docs/books/tutorial/uiswing/layout/custom.html

Page 26: Java Swing - Lecture 3 Layout Management

G5BUID - Java Swing - 2005

26

Summary

• Creating a layout manager• Consulting managers• Types of managers

BorderLayout GridLayout BoxLayout GridBagLayout FlowLayout CardLayout

• Choosing managers• Absolute positioning• Custom layout managers• Next time: Event handling and event listeners