1 / 26

Java Swing - Lecture 3 Layout Management

Java Swing - Lecture 3 Layout Management. Boriana Koleva (bnk@cs.nott.ac.uk). 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”.

aine
Download Presentation

Java Swing - Lecture 3 Layout Management

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Java Swing - Lecture 3Layout Management Boriana Koleva (bnk@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” G5BUID - Java Swing - 2005

  3. Laying out components • Manage realized components • Determine size and position • Each container has a layout manager • (usually) 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 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()); 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() 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 G5BUID - Java Swing - 2005

  8. Layout managers - types • BorderLayout • BoxLayout • FlowLayout • GridLayout • GridBagLayout • CardLayout 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 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 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 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. 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 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 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); 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 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 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 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 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 G5BUID - Java Swing - 2005

  21. Layout managers - other layout features • Absolute positioning of components • When • How • Customising layout managers • When • How 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 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); 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 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 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 G5BUID - Java Swing - 2005

More Related