Easy to Learn Java: Programming Articles, Examples and Tips

Start with Java in a few days with Java Lessons or Lectures

Home

Code Examples

Java Tools

More Java Tools!

Java Forum

All Java Tips

Books

Submit News
Search the site here...
Search...
 
Search the JavaFAQ.nu
1000 Java Tips ebook

1000 Java Tips - Click here for the high resolution copy!1000 Java Tips - Click here for the high resolution copy!

Java Screensaver, take it here

Free "1000 Java Tips" eBook is here! It is huge collection of big and small Java programming articles and tips. Please take your copy here.

Take your copy of free "Java Technology Screensaver"!.

Easy Learn Java: Programming Articles, Examples and Tips - Page 305


Previous 1060 Stories (530 Pages, 2 Per Page) Next

The Java Lesson 28: Containers and simple layout managers

Go to all tips in Java Lessons by Jon Huhtala
All Java Lessons contents page | Java Lesson 1 | Java Lesson 2 | Java Lesson 3 | Java Lesson 4 | Java Lesson 5 | Java Lesson 6 | Java Lesson 7 | Java Lesson 8 | Java Lesson 9 | Java Lesson 10 | Java Lesson 11 | Java Lesson 12 | Java Lesson 13 | Java Lesson 14 | Java Lesson 15 | Java Lesson 16 | Java Lesson 17 | Java Lesson 18 | Java Lesson 19 | Java Lesson 20 | Java Lesson 21 | Java Lesson 22 | Java Lesson 23 | Java Lesson 24 | Java Lesson 25 | Java Lesson 26 | Java Lesson 27 | Java Lesson 28 | Java Lesson 29 | Java Lesson 30 | Java Lesson 31 | Java Lesson 32 | Java Lesson 33 | Java Lesson 34 | Java Lesson 35 | Java Lesson 36 | Java Lesson 37 | Java Lesson 38 | Java Lesson 39 | Java Lesson 40 | Java Lesson 41 | Java Lesson 42 | Java Lesson 43 | Java Lesson 44 | Java Lesson 45 | Java Lesson 46

Java Lesson 28 by Jon Huhtala: Containers and simple layout managers


The Container class

  • Is an extension of the Component class

Object

Component

Container
  • Can contain other AWT components and containers

  • Is abstract so it can never be directly instantiated

  • Has been subclassed to be the root of all AWT containers. Commonly used subclasses are:

Class

Description

Panel

The simplest container. Provides space in which an application can attach any other component, including other panels.

ScrollPane

A container which implements automatic horizontal and/or vertical scrolling

Window

A container for a top-level window that has no borders and no menu bar. Useful subclasses are Dialog and Frame.

  • Maintains and controls a list of components it contains. Commonly used methods are:

Method

Usage

add()

Adds a component to the internal list

remove()

Removes a component from the internal list

removeAll()

Removes all components from the internal list

setLayout()

Sets the layout manager for the container

validate()

Causes the container to lay out its components again after a component has been added or removed

Notes:

  1. Many methods are overloaded to accept a range of parameter types and values

  2. As an extension of Component (and Object), all features of those classes are inherited


Layout managers

  • Are objects that control the size and visual arrangement of components within a container

  • Can be assigned to a container using its setLayout() method but only one layout manager can be in effect at any given time

  • Can be complex. The simpler ones (BorderLayout, FlowLayout, and GridLayout) are covered in this lesson. The harder ones (CardLayout and GridBagLayout) will be covered later.

BorderLayout

  • Can manage up to five components that are placed in named positions

  • Is the default layout manager for all Window containers (Frame and Dialog)

  • Arranges components as follows:

North

West

Center

East

South

Example:

import java.awt.*;
import java.awt.event.*;

public class App extends Frame implements WindowListener, ActionListener {

Button b1, b2, b3, b4, b5;

public static void main(String[] args) {
App myWindow = new App("Border Layout");
myWindow.setSize(250,150);
myWindow.setVisible(true);
}

public App(String title) {
super(title);
setLayout(new BorderLayout());
addWindowListener(this);
b1 = new Button("North");
add(b1, BorderLayout.NORTH);
b1.addActionListener(this);
b2 = new Button("West");
add(b2, BorderLayout.WEST);
b2.addActionListener(this);
b3 = new Button("Center");
add(b3, BorderLayout.CENTER);
b3.addActionListener(this);
b4 = new Button("East");
add(b4, BorderLayout.EAST);
b4.addActionListener(this);
b5 = new Button("South");
add(b5, BorderLayout.SOUTH);
b5.addActionListener(this);
}

public void actionPerformed(ActionEvent e) {
remove((Component)e.getSource());
validate();
}

public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}

public void windowOpened(WindowEvent e) {}
public void windowActivated(WindowEvent e) {}
public void windowIconified(WindowEvent e) {}
public void windowDeiconified(WindowEvent e) {}
public void windowDeactivated(WindowEvent e) {}
public void windowClosed(WindowEvent e) {}
}

Notes:

  1. The sample declares five Button object references (b1 through b5)

  2. In the constructor, setLayout() is explicitly coded but isn't really needed as BorderLayout is the default for a Frame

  3. With BorderLayout, the add() method accepts a second parameter that specifies where the component is to be placed. The default location is BorderLayout.CENTER.

  4. The actionPerformed() method removes the component that the user clicked and forces the window to be redrawn. The object cast is needed because the getSource() method returns a generic Object and the remove() method requires a Component.

  5. BorderLayout preserves the width of components in the EAST and WEST positions and the height of components in the NORTH and SOUTH positions. The component in the CENTER is stretched to fill the remaining space. This can be seen by resizing the window during program execution.

FlowLayout

  • Adds components from left to right, starting a new row when the current row is filled

  • Automatically centers the component(s) within each row

  • Gives each component its preferred size and does not resize components when the container is resized

  • Is the default layout manager for all Panel containers (and all applets because they are Panel extensions)

Example:

import java.awt.*;
import java.awt.event.*;

public class App extends Frame implements WindowListener, ActionListener {

Button b1, b2, b3, b4;

public static void main(String[] args) {
App myWindow = new App("Flow Layout");
myWindow.setSize(200,200);
myWindow.setVisible(true);
}

public App(String title) {
super(title);
setLayout(new FlowLayout());
addWindowListener(this);
b1 = new Button("Button One");
add(b1);
b1.addActionListener(this);
b2 = new Button("Button Two");
add(b2);
b2.addActionListener(this);
b3 = new Button("This is Button Three");
add(b3);
b3.addActionListener(this);
b4 = new Button("Button Four");
add(b4);
b4.addActionListener(this);
}

public void actionPerformed(ActionEvent e) {
remove((Component)e.getSource());
validate();
}

public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}

public void windowOpened(WindowEvent e) {}
public void windowActivated(WindowEvent e) {}
public void windowIconified(WindowEvent e) {}
public void windowDeiconified(WindowEvent e) {}
public void windowDeactivated(WindowEvent e) {}
public void windowClosed(WindowEvent e) {}
}

Notes:

  1. The sample declares four Button object references (b1 through b4)

  2. In the constructor, setLayout() is called to set FlowLayout for the Frame

  3. With FlowLayout, the add() method simply adds components to the container in a first-come, first-served basis

  4. The actionPerformed() method removes the component that the user clicked and forces the window to be redrawn. The object cast is needed because the getSource() method returns a generic Object and the remove() method requires a Component.

  5. FlowLayout preserves the height and width of all components. Resizing the window during program execution will result in components being rearranged but not resized.

GridLayout

  • Divides the container into a rectangular grid of equal sized cells

  • Places each component in a different cell. Rows are filled from left to right starting with the top row.

  • Resizes each component to completely fill its assigned cell

Example:

import java.awt.*;
import java.awt.event.*;

public class App extends Frame implements WindowListener, ActionListener {

Button b1, b2, b3, b4, b5, b6;

public static void main(String[] args) {
App myWindow = new App("Grid Layout (2 x 3)");
myWindow.setSize(250,250);
myWindow.setVisible(true);
}

public App(String title) {
super(title);
setLayout(new GridLayout(2,3));
setFont(new Font("San Serif", Font.BOLD, 20));
addWindowListener(this);
b1 = new Button("1");
add(b1);
b1.addActionListener(this);
b2 = new Button("2");
add(b2);
b2.addActionListener(this);
b3 = new Button("3");
add(b3);
b3.addActionListener(this);
b4 = new Button("4");
add(b4);
b4.addActionListener(this);
b5 = new Button("5");
add(b5);
b5.addActionListener(this);
b6 = new Button("6");
add(b6);
b6.addActionListener(this);
}

public void actionPerformed(ActionEvent e) {
remove((Component)e.getSource());
validate();
}

public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}

public void windowOpened(WindowEvent e) {}
public void windowActivated(WindowEvent e) {}
public void windowIconified(WindowEvent e) {}
public void windowDeiconified(WindowEvent e) {}
public void windowDeactivated(WindowEvent e) {}
public void windowClosed(WindowEvent e) {}
}

Notes:

  1. The sample declares six Button object references (b1 through b6)

  2. In the constructor, setLayout() is called to set a GridLayout having 2 rows and 3 columns for the Frame

  3. With FlowLayout, the add() method simply adds components to the next cell in the container (going left to right, row by row)

  4. The actionPerformed() method removes the component that the user clicked and forces the window to be redrawn. The object cast is needed because the getSource() method returns a generic Object and the remove() method requires a Component.

  5. GridLayout ignores the height and width of all components. They are resized to fit their cell. Resizing the window during program execution will result in components being resized but not rearranged.

Satisfying complex GUI requirements

Nested containers can be used to satisfy many complex graphical interface requirements. For example, a Panel with a GridLayout might be placed in the center of a Frame having a BorderLayout to produce something like this:

North

West

1

2

3

East

4

5

6

7

8

9

South

The possibilities are nearly infinite.

Lab exercise for Ferris students

E-mail your answers to this assignment no later than the due date listed in the class schedule.

Review questions

  1. Which of these layout managers can be used with a single container to show 6 components at one time? (choose two)

  1. BorderLayout

  2. FlowLayout

  3. GridLayout

  1. If myPanel references a Panel object, code a single statement to set the panel's layout manager so it will display components in three rows of five columns each.

  1. Assume that myFrame references a Frame having a BorderLayout. Which of the following would correctly add a Button object to the center of myFrame? (choose two)

  1. myFrame.add(new Button("Hello"));

  2. myFrame.add("Hello");

  3. myFrame.add(new Button("Hello"), CENTER);

  4. myFrame.add(new Button("Hello"), BorderLayout.CENTER);

  5. myFrame.add(new Button("Hello"), 1, 1);

  1. Which one statement is true about attempting to compile and run the application shown below? The line numbers are for reference purposes only.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import java.awt.*;
import java.awt.event.*;

public class App extends Frame implements WindowListener{

public static void main(String[] args) {
App myApp = new App();
myApp.setVisible(true);
}

public App() {
setSize(300, 300);
addWindowListener(this);
setFont(new Font("San Serif", Font.BOLD, 36));
Button b = new Button("XYZ");
add(b, BorderLayout.EAST);
}

public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}

public void windowOpened(WindowEvent e) {}
public void windowActivated(WindowEvent e) {}
public void windowIconified(WindowEvent e) {}
public void windowDeiconified(WindowEvent e) {}
public void windowDeactivated(WindowEvent e) {}
public void windowClosed(WindowEvent e) {}
}
  1. Compilation fails at line 16 because no layout manager has been specified

  2. Compilation succeeds but nothing is displayed

  3. A single button with the text "XYZ" will entirely fill the window on the screen

  4. A single button with the text "XYZ" will occupy the right side of the window on the screen. The button will be taller than it is wide.

  5. A single button with the text "XYZ" will occupy the right side of the window on the screen. If the window is resized to be wider, the button will also become wider.


23475 bytes more | comments? | Printer Friendly Page  Send to a Friend | Score: 0
Posted by jalex on Thursday, February 17, 2005 (00:00:00) (10409 reads)

Pure Java runs JAXB for XML processing

Go to all tips in Java Tools
This new technology offers developers an efficient means for extracting metadata from Web sites that use a common template design and is compliant with Linux and Windows based UIMA SDK. Web Metadata Extractor converts scattered, unstructured information into a structured format written with a pure Java-based user interface which users can quickly generate the required templates by simple interactions. Demo is available.

5 comments | Printer Friendly Page  Send to a Friend | Score: 0
Posted by Anonymous on Tuesday, February 15, 2005 (00:00:00) (2440 reads)

Previous 1060 Stories (530 Pages, 2 Per Page) Next

530| 529| 528| 527| 526| 525| 524| 523| 522| 521| 520| 519| 518| 517| 516| 515| 514| 513| 512| 511| 510| 509| 508| 507| 506| 505| 504| 503| 502| 501| 500| 499| 498| 497| 496| 495| 494| 493| 492| 491| 490| 489| 488| 487| 486| 485| 484| 483| 482| 481| 480| 479| 478| 477| 476| 475| 474| 473| 472| 471| 470| 469| 468| 467| 466| 465| 464| 463| 462| 461| 460| 459| 458| 457| 456| 455| 454| 453| 452| 451| 450| 449| 448| 447| 446| 445| 444| 443| 442| 441| 440| 439| 438| 437| 436| 435| 434| 433| 432| 431| 430| 429| 428| 427| 426| 425| 424| 423| 422| 421| 420| 419| 418| 417| 416| 415| 414| 413| 412| 411| 410| 409| 408| 407| 406| 405| 404| 403| 402| 401| 400| 399| 398| 397| 396| 395| 394| 393| 392| 391| 390| 389| 388| 387| 386| 385| 384| 383| 382| 381| 380| 379| 378| 377| 376| 375| 374| 373| 372| 371| 370| 369| 368| 367| 366| 365| 364| 363| 362| 361| 360| 359| 358| 357| 356| 355| 354| 353| 352| 351| 350| 349| 348| 347| 346| 345| 344| 343| 342| 341| 340| 339| 338| 337| 336| 335| 334| 333| 332| 331| 330| 329| 328| 327| 326| 325| 324| 323| 322| 321| 320| 319| 318| 317| 316| 315| 314| 313| 312| 311| 310| 309| 308| 307| 306|
305
| 304| 303| 302| 301| 300| 299| 298| 297| 296| 295| 294| 293| 292| 291| 290| 289| 288| 287| 286| 285| 284| 283| 282| 281| 280| 279| 278| 277| 276| 275| 274| 273| 272| 271| 270| 269| 268| 267| 266| 265| 264| 263| 262| 261| 260| 259| 258| 257| 256| 255| 254| 253| 252| 251| 250| 249| 248| 247| 246| 245| 244| 243| 242| 241| 240| 239| 238| 237| 236| 235| 234| 233| 232| 231| 230| 229| 228| 227| 226| 225| 224| 223| 222| 221| 220| 219| 218| 217| 216| 215| 214| 213| 212| 211| 210| 209| 208| 207| 206| 205| 204| 203| 202| 201| 200| 199| 198| 197| 196| 195| 194| 193| 192| 191| 190| 189| 188| 187| 186| 185| 184| 183| 182| 181| 180| 179| 178| 177| 176| 175| 174| 173| 172| 171| 170| 169| 168| 167| 166| 165| 164| 163| 162| 161| 160| 159| 158| 157| 156| 155| 154| 153| 152| 151| 150| 149| 148| 147| 146| 145| 144| 143| 142| 141| 140| 139| 138| 137| 136| 135| 134| 133| 132| 131| 130| 129| 128| 127| 126| 125| 124| 123| 122| 121| 120| 119| 118| 117| 116| 115| 114| 113| 112| 111| 110| 109| 108| 107| 106| 105| 104| 103| 102| 101| 100| 99| 98| 97| 96| 95| 94| 93| 92| 91| 90| 89| 88| 87| 86| 85| 84| 83| 82| 81| 80| 79| 78| 77| 76| 75| 74| 73| 72| 71| 70| 69| 68| 67| 66| 65| 64| 63| 62| 61| 60| 59| 58| 57| 56| 55| 54| 53| 52| 51| 50| 49| 48| 47| 46| 45| 44| 43| 42| 41| 40| 39| 38| 37| 36| 35| 34| 33| 32| 31| 30| 29| 28| 27| 26| 25| 24| 23| 22| 21| 20| 19| 18| 17| 16| 15| 14| 13| 12| 11| 10| 9| 8| 7| 6| 5| 4| 3| 2| 1|


Home Code Examples Java Forum All Java Tips Books Submit News, Code... Search... Offshore Software Tech Doodling

RSS feed Java FAQ RSS feed Java FAQ News     

    RSS feed Java Forums RSS feed Java Forums

All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest 1999-2006 by Java FAQs Daily Tips.

Interactive software released under GNU GPL, Code Credits, Privacy Policy