1 Patterns & GUI Programming Part 2. 2 Creating a Custom Layout Manager Layout manager determines...
-
date post
19-Dec-2015 -
Category
Documents
-
view
239 -
download
7
Transcript of 1 Patterns & GUI Programming Part 2. 2 Creating a Custom Layout Manager Layout manager determines...
![Page 1: 1 Patterns & GUI Programming Part 2. 2 Creating a Custom Layout Manager Layout manager determines how components are arranged/displayed in a container.](https://reader036.fdocuments.in/reader036/viewer/2022062308/56649d3a5503460f94a158c9/html5/thumbnails/1.jpg)
1
Patterns & GUI Programming
Part 2
![Page 2: 1 Patterns & GUI Programming Part 2. 2 Creating a Custom Layout Manager Layout manager determines how components are arranged/displayed in a container.](https://reader036.fdocuments.in/reader036/viewer/2022062308/56649d3a5503460f94a158c9/html5/thumbnails/2.jpg)
2
Creating a Custom Layout Manager
• Layout manager determines how components are arranged/displayed in a container
• Can determine your own layout pattern by implementing the LayoutManager interface
![Page 3: 1 Patterns & GUI Programming Part 2. 2 Creating a Custom Layout Manager Layout manager determines how components are arranged/displayed in a container.](https://reader036.fdocuments.in/reader036/viewer/2022062308/56649d3a5503460f94a158c9/html5/thumbnails/3.jpg)
3
LayoutManager interface
public interface LayoutManager { void layoutContainer(Container parent); Dimension minimumLayoutSize(Container parent); Dimension preferredLayoutSize(Container parent); void addLayoutComponent(String name, Component comp); void removeLayoutComponent(Component comp); }
![Page 4: 1 Patterns & GUI Programming Part 2. 2 Creating a Custom Layout Manager Layout manager determines how components are arranged/displayed in a container.](https://reader036.fdocuments.in/reader036/viewer/2022062308/56649d3a5503460f94a158c9/html5/thumbnails/4.jpg)
4
LayoutManager methods
• minimumLayoutSize() and preferredLayoutSize() determine the minimum and default size of the container when components are laid out
• Start with preferredLayoutSize - determine the height and width of each component, and use the combined sizes to determine how large window must be
• Can implement minimumLayoutSize() by just having it call preferredLayoutSize()
![Page 5: 1 Patterns & GUI Programming Part 2. 2 Creating a Custom Layout Manager Layout manager determines how components are arranged/displayed in a container.](https://reader036.fdocuments.in/reader036/viewer/2022062308/56649d3a5503460f94a158c9/html5/thumbnails/5.jpg)
5
LayoutManager methods
• layoutContainer() lays out components by setting position and size of each
• Method computes positions of each component then calls setBounds to put each component in its correct location
![Page 6: 1 Patterns & GUI Programming Part 2. 2 Creating a Custom Layout Manager Layout manager determines how components are arranged/displayed in a container.](https://reader036.fdocuments.in/reader036/viewer/2022062308/56649d3a5503460f94a158c9/html5/thumbnails/6.jpg)
6
Strategy Pattern
• Context: – A class can benefit from different variants for
an algorithm
– Clients sometimes want to replace standard algorithms with custom versions
![Page 7: 1 Patterns & GUI Programming Part 2. 2 Creating a Custom Layout Manager Layout manager determines how components are arranged/displayed in a container.](https://reader036.fdocuments.in/reader036/viewer/2022062308/56649d3a5503460f94a158c9/html5/thumbnails/7.jpg)
7
Strategy Pattern
• Solution – Define an interface type that is an abstraction for
the algorithm
– Actual strategy classes realize this interface type.
– Clients can supply strategy objects
– Whenever the algorithm needs to be executed, the context class calls the appropriate methods of the strategy object
![Page 8: 1 Patterns & GUI Programming Part 2. 2 Creating a Custom Layout Manager Layout manager determines how components are arranged/displayed in a container.](https://reader036.fdocuments.in/reader036/viewer/2022062308/56649d3a5503460f94a158c9/html5/thumbnails/8.jpg)
8
Strategy Pattern
![Page 9: 1 Patterns & GUI Programming Part 2. 2 Creating a Custom Layout Manager Layout manager determines how components are arranged/displayed in a container.](https://reader036.fdocuments.in/reader036/viewer/2022062308/56649d3a5503460f94a158c9/html5/thumbnails/9.jpg)
9
Strategy Pattern - examples
• Pluggable strategy for layout management – Layout manager object responsible for executing
concrete strategy
– Generalizes to Strategy Design Pattern
• Other manifestation: ComparatorsComparator comp = new CountryComparatorByName();Collections.sort(countries, comp);
![Page 10: 1 Patterns & GUI Programming Part 2. 2 Creating a Custom Layout Manager Layout manager determines how components are arranged/displayed in a container.](https://reader036.fdocuments.in/reader036/viewer/2022062308/56649d3a5503460f94a158c9/html5/thumbnails/10.jpg)
10
Layout Management - Strategy
• Name in Pattern– Context
– Strategy
– ConcreteStrategy
– doWork()
• Actual nameContainer
LayoutManager
BorderLayout, FlowLayout, GridLayout, etc.
layoutContainer()
![Page 11: 1 Patterns & GUI Programming Part 2. 2 Creating a Custom Layout Manager Layout manager determines how components are arranged/displayed in a container.](https://reader036.fdocuments.in/reader036/viewer/2022062308/56649d3a5503460f94a158c9/html5/thumbnails/11.jpg)
11
Sorting - Strategy
• Design Name– Context
– Strategy
– ConcreteStrategy
– doWork()
• Actual nameCollections
Comparator
Comparator-implementing class
compare()
![Page 12: 1 Patterns & GUI Programming Part 2. 2 Creating a Custom Layout Manager Layout manager determines how components are arranged/displayed in a container.](https://reader036.fdocuments.in/reader036/viewer/2022062308/56649d3a5503460f94a158c9/html5/thumbnails/12.jpg)
12
Composite Pattern
• Context – Primitive objects can be combined to composite
objects
– Clients treat a composite object as a primitive object
![Page 13: 1 Patterns & GUI Programming Part 2. 2 Creating a Custom Layout Manager Layout manager determines how components are arranged/displayed in a container.](https://reader036.fdocuments.in/reader036/viewer/2022062308/56649d3a5503460f94a158c9/html5/thumbnails/13.jpg)
13
Composite Pattern• Solution
– Define an interface type that is an abstraction for the primitive objects
– Composite object collects primitive objects
– Composite and primitive classes implement same interface type.
– When implementing a method from the interface type, the composite class applies the method to its primitive objects and combines the results
![Page 14: 1 Patterns & GUI Programming Part 2. 2 Creating a Custom Layout Manager Layout manager determines how components are arranged/displayed in a container.](https://reader036.fdocuments.in/reader036/viewer/2022062308/56649d3a5503460f94a158c9/html5/thumbnails/14.jpg)
14
Composite Pattern
![Page 15: 1 Patterns & GUI Programming Part 2. 2 Creating a Custom Layout Manager Layout manager determines how components are arranged/displayed in a container.](https://reader036.fdocuments.in/reader036/viewer/2022062308/56649d3a5503460f94a158c9/html5/thumbnails/15.jpg)
15
Containers and Components
• Containers collect GUI components– Sometimes, want to add a container to another
container
– Container should be a component
• Composite design pattern – Composite methods typically invoke component
methods
– E.g. Container.getPreferredSize invokes getPreferredSize of components
![Page 16: 1 Patterns & GUI Programming Part 2. 2 Creating a Custom Layout Manager Layout manager determines how components are arranged/displayed in a container.](https://reader036.fdocuments.in/reader036/viewer/2022062308/56649d3a5503460f94a158c9/html5/thumbnails/16.jpg)
16
AWT components - composite
• Design name– Primitive
– Composite
– Leaf
– method()
• Actual nameComponent
Container
JButton, JPanel, JOptionPane, or other class with no children
Component method such as getPreferredSize()
![Page 17: 1 Patterns & GUI Programming Part 2. 2 Creating a Custom Layout Manager Layout manager determines how components are arranged/displayed in a container.](https://reader036.fdocuments.in/reader036/viewer/2022062308/56649d3a5503460f94a158c9/html5/thumbnails/17.jpg)
17
Decorator Pattern
• Context– Component objects can be decorated (visually or
behaviorally enhanced)
– The decorated object can be used in the same way as the undecorated object
– The component class does not want to take on the responsibility of the decoration
– There may be an open-ended set of possible decorations
![Page 18: 1 Patterns & GUI Programming Part 2. 2 Creating a Custom Layout Manager Layout manager determines how components are arranged/displayed in a container.](https://reader036.fdocuments.in/reader036/viewer/2022062308/56649d3a5503460f94a158c9/html5/thumbnails/18.jpg)
18
Decorator Pattern
• Solution – Define an interface type that is an abstraction
for the component
– Concrete component classes realize this interface type.
– Decorator classes also realize this interface type.
![Page 19: 1 Patterns & GUI Programming Part 2. 2 Creating a Custom Layout Manager Layout manager determines how components are arranged/displayed in a container.](https://reader036.fdocuments.in/reader036/viewer/2022062308/56649d3a5503460f94a158c9/html5/thumbnails/19.jpg)
19
Decorator Pattern
• Solution– A decorator object manages the component
object that it decorates
– When implementing a method from the component interface type, the decorator class applies the method to the decorated component and combines the result with the effect of the decoration.
![Page 20: 1 Patterns & GUI Programming Part 2. 2 Creating a Custom Layout Manager Layout manager determines how components are arranged/displayed in a container.](https://reader036.fdocuments.in/reader036/viewer/2022062308/56649d3a5503460f94a158c9/html5/thumbnails/20.jpg)
20
Decorator Pattern
![Page 21: 1 Patterns & GUI Programming Part 2. 2 Creating a Custom Layout Manager Layout manager determines how components are arranged/displayed in a container.](https://reader036.fdocuments.in/reader036/viewer/2022062308/56649d3a5503460f94a158c9/html5/thumbnails/21.jpg)
21
Scroll Panes & Scroll Bars
• Scroll bars useful when a component contains more information than can be displayed in available space
• Add functionality to underlying component
• JScrollPane decorates a component and is itself a component
![Page 22: 1 Patterns & GUI Programming Part 2. 2 Creating a Custom Layout Manager Layout manager determines how components are arranged/displayed in a container.](https://reader036.fdocuments.in/reader036/viewer/2022062308/56649d3a5503460f94a158c9/html5/thumbnails/22.jpg)
22
JScrollPane
Scroll bars can be attached to components Approach #1: Component class can turn on scroll
bars
Approach #2: Scroll bars can surround componentJScrollPane pane = new
JScrollPane(component); Swing uses approach #2 - JScrollPane is again
a component
![Page 23: 1 Patterns & GUI Programming Part 2. 2 Creating a Custom Layout Manager Layout manager determines how components are arranged/displayed in a container.](https://reader036.fdocuments.in/reader036/viewer/2022062308/56649d3a5503460f94a158c9/html5/thumbnails/23.jpg)
23
Decorator Pattern: Scroll Bars
• Design name:– Component
– ConcreteComponent
– Decorator
– method()
• Actual name:Component
JTextArea
JScrollPane
paint() or other method of Component
![Page 24: 1 Patterns & GUI Programming Part 2. 2 Creating a Custom Layout Manager Layout manager determines how components are arranged/displayed in a container.](https://reader036.fdocuments.in/reader036/viewer/2022062308/56649d3a5503460f94a158c9/html5/thumbnails/24.jpg)
24
I/O stream filters as decorators
• BufferedReader takes a Reader and adds buffering
• Result is another Reader: Decorator patternInputStreamReader r = new InputStreamReader(System.in);
BufferedReader console = new BufferedReader(r);
• Many other decorators in stream library, e.g. PrintWriter
![Page 25: 1 Patterns & GUI Programming Part 2. 2 Creating a Custom Layout Manager Layout manager determines how components are arranged/displayed in a container.](https://reader036.fdocuments.in/reader036/viewer/2022062308/56649d3a5503460f94a158c9/html5/thumbnails/25.jpg)
25
Decorator pattern: I/O filters
• Design name:– Component
– ConcreteComponent
– Decorator
– method()
• Actual name:Reader
InputStreamReader
BufferedReader
read()
![Page 26: 1 Patterns & GUI Programming Part 2. 2 Creating a Custom Layout Manager Layout manager determines how components are arranged/displayed in a container.](https://reader036.fdocuments.in/reader036/viewer/2022062308/56649d3a5503460f94a158c9/html5/thumbnails/26.jpg)
26
How to Recognize Patterns
• Look at intent of pattern: e.g. COMPOSITE has different intent than DECORATOR
• Remember common uses (e.g. STRATEGY for layout managers)
• Use context and solution as "litmus test"
![Page 27: 1 Patterns & GUI Programming Part 2. 2 Creating a Custom Layout Manager Layout manager determines how components are arranged/displayed in a container.](https://reader036.fdocuments.in/reader036/viewer/2022062308/56649d3a5503460f94a158c9/html5/thumbnails/27.jpg)
27
Recognizing Patterns
• Not everything that is strategic is an example of STRATEGY pattern
– Context must want to use different variants of an algorithm
– Must be an interface type that is an abstraction of the algorithm; concrete strategy classes must implement the interface
– Client supplies object of strategy class to context class; context class uses strategy object to invoke algorithm
![Page 28: 1 Patterns & GUI Programming Part 2. 2 Creating a Custom Layout Manager Layout manager determines how components are arranged/displayed in a container.](https://reader036.fdocuments.in/reader036/viewer/2022062308/56649d3a5503460f94a158c9/html5/thumbnails/28.jpg)
28
Litmus test - example
Can add border to Swing componentBorder b = new EtchedBorder()component.setBorder(b);
• Undeniably decorative• Is it an example of DECORATOR?
![Page 29: 1 Patterns & GUI Programming Part 2. 2 Creating a Custom Layout Manager Layout manager determines how components are arranged/displayed in a container.](https://reader036.fdocuments.in/reader036/viewer/2022062308/56649d3a5503460f94a158c9/html5/thumbnails/29.jpg)
29
Litmus test - example
• Component objects can be decorated (visually or behaviorally enhanced): PASS
• The decorated object can be used in the same way as the undecorated object: PASS
• The component class does not want to take on the responsibility of the decoration: FAIL--the component class has setBorder method