Presentation is loading. Please wait.

Presentation is loading. Please wait.

Java Swing - Lecture 3 Layout Management

Similar presentations


Presentation on theme: "Java Swing - Lecture 3 Layout Management"— Presentation transcript:

1 Java Swing - Lecture 3 Layout Management
Boriana Koleva

2 Where are we up to? Last Time: Today Containers (Frames and Dialogs)
Hierarchy Root Panes Layered Panes Content Panes Glass Panes Components Lots of ‘em… Today The exciting topic of “Layout Management” G5BUID - Java Swing

3 Laying out components Manage realized components
Determine size and position Each container has a layout manager (usually) G5BUID - Java Swing

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: G5BUID - Java Swing

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()); G5BUID - Java Swing

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() G5BUID - Java Swing

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 G5BUID - Java Swing

8 Layout managers - types
BorderLayout BoxLayout FlowLayout GridLayout GridBagLayout CardLayout G5BUID - Java Swing

9 BorderLayout Setting gaps between components (default = 0) 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 G5BUID - Java Swing

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 G5BUID - Java Swing

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 G5BUID - Java Swing

12 BoxLayout (3) Component sizes Alignment
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. G5BUID - Java Swing

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 G5BUID - Java Swing

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 G5BUID - Java Swing

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); G5BUID - Java Swing

16 GridBagLayout (2) Constraints Example explained very well here:
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: Example explained very well here: G5BUID - Java Swing

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 G5BUID - Java Swing

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 G5BUID - Java Swing

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 G5BUID - Java Swing

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 G5BUID - Java Swing

21 Layout managers - other layout features
Absolute positioning of components When How Customising layout managers G5BUID - Java Swing

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 G5BUID - Java Swing

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); G5BUID - Java Swing

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 G5BUID - Java Swing

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 G5BUID - Java Swing

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 G5BUID - Java Swing


Download ppt "Java Swing - Lecture 3 Layout Management"

Similar presentations


Ads by Google