Java Swing - Lecture 3 Layout Management - PowerPoint PPT Presentation

About This Presentation
Title:

Java Swing - Lecture 3 Layout Management

Description:

Java Swing - Lecture 3 Layout Management Boriana Koleva (bnk_at_cs.nott.ac.uk) – PowerPoint PPT presentation

Number of Views:121
Avg rating:3.0/5.0
Slides: 27
Provided by: MikeF161
Category:

less

Transcript and Presenter's Notes

Title: Java Swing - Lecture 3 Layout Management


1
Java Swing - Lecture 3Layout Management
  • Boriana Koleva
  • (bnk_at_cs.nott.ac.uk)

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

3
Laying out components
  • Manage realized components
  • Determine size and position
  • Each container has a layout manager
  • (usually)

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/la
    yout/using.html

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())

6
Consulting layout managers (1)
  • Consulted automatically when container may need
    to change its appearance.
  • These methods result in consultation, but DONT
    trigger new layout
  • add(), remove(), removeAll()
  • getAlignmentX(), getAlignmentY()
  • getPreferredSize(), getMinimumSize(),
    getMaximumSize()

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

8
Layout managers - types
  • BorderLayout
  • BoxLayout
  • FlowLayout
  • GridLayout
  • GridBagLayout
  • CardLayout

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

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

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

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.

13
FlowLayout
  • Very simple - JPanels 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

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

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() GridB
agConstraints c new GridBagConstraints() JPane
l 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.setConstrai
nts(theComponent, c) pane.add(theComponent)
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/la
    yout/gridbagConstraints.html
  • Example explained very well here
  • http//java.sun.com/docs/books/tutorial/uiswing/la
    yout/gridbagExample.html

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

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
  • fillGridBagConstraints.BOTH
  • BoxLayout
  • Component specifies very large preferred/maximum
    sizes

19
Choosing layout managers (2)
  • To display a few components in a compact row
  • JPanels default FlowLayout
  • BoxLayout
  • Display a few components of the same size in rows
    and columns
  • GridLayout

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

21
Layout managers - other layout features
  • Absolute positioning of components
  • When
  • How
  • Customising layout managers
  • When
  • How

22
Absolute positioning (1)
  • Dont do it unless
  • component size isnt affected by container size
    or font looknfeel changes
  • e.g. desktop panes containing internal frames
  • custom container performs size position
    calculations particular to container
  • e.g. split panes

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)

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

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/la
    yout/custom.html

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
Write a Comment
User Comments (0)
About PowerShow.com