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 327


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

Java Lesson 38: The WindowListener interface and the WindowAdapter class

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 38 by Jon Huhtala

The WindowListener interface and the WindowAdapter class


Overview

A class that is interested in processing a window event must either (1) implement the WindowListener interface and all the methods it contains or (2) extend the abstract WindowAdapter class.

The WindowListener interface

  • Is part of the java.awt.event package

  • Is a listener interface for receiving window events

  • May be implemented by a class that has the Window class as an ancestor. The implementation is specified in the class header. For example,

    public class MyFrame extends Frame implements WindowListener

    begins the definition of a Frame class extension (MyFrame) that implements the WindowListener interface. To be notified of window events, an object of MyFrame must register its listener using the addWindowListener() method. For example, if x is a MyFrame object its WindowListener may be registered with the following statement:

x.addWindowListener(this);

When the object's status changes due to being opened or closed, activated or deactivated, iconified or deiconified, a WindowEvent is fired to the relevant method within the listener object.

  • Can NOT detect moving, resizing, hiding, or showing a window. Such actions fire a ComponentEvent and that can be detected with a registered ComponentListener.

  • Has seven required methods that MUST be defined by the implementing class. The methods are:

Method

Usage

windowActivated()

Invoked when the window becomes the active window, which means the window may receive keyboard events

windowClosed()

Invoked when the window has been closed as the result of calling dispose() on the window

windowClosing()

Invoked when the user attempts to close the window

windowDeactivated()

Invoked when the window is no longer the active window, which means the window can no longer receive keyboard events

windowDeiconified()

Invoked when the window is changed from a minimized to a normal state

windowIconified()

Invoked when the window is changed from a normal to a minimized state

windowOpened()

Invoked when the window is first made visible

Each of the above methods receives a WindowEvent object as a parameter and returns no value (is void). Consult the Java API for more details.


Example:

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

public class App extends Frame implements WindowListener {

TextArea log = new TextArea("",5,20,TextArea.SCROLLBARS_VERTICAL_ONLY);

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

public App(String title) {
super(title);
setLayout(new BorderLayout());
addWindowListener(this);
log.setEditable(false);
add(log);
}

public void windowOpened(WindowEvent e) {
log.append("Opened" + " ");
}

public void windowActivated(WindowEvent e) {
log.append("Activated" + " ");
}

public void windowIconified(WindowEvent e) {
log.append("Iconified" + " ");
}

public void windowDeiconified(WindowEvent e) {
log.append("Deiconified" + " ");
}

public void windowDeactivated(WindowEvent e) {
log.append("Deactivated" + " ");
}

public void windowClosing(WindowEvent e) {
System.out.println("Closing");
dispose();
}

public void windowClosed(WindowEvent e) {
System.out.println("Closed");
System.exit(0);
}
}

Notes:

  1. The class implements the WindowListener interface in order to handle window events

  2. The TextArea object (log) is used to display a scrolling list of messages pertaining to window events

  3. Within the application's constructor, the WindowListener is registered

  4. Each of the required WindowListener methods is defined to send a message to either the text area or the system output device (if the window is closing or closed)

  5. When testing, launch more than one copy of the program. Then, click back and forth between the windows to see activation and deactivation messages.

The WindowAdapter class

  • Is part of the java.awt.event package

  • Is an extension of the Object class

Object

WindowAdapter

  • Is an abstract adapter class for receiving window events. It exists as convenience for creating listener objects.

  • Has seven empty methods that may be overridden to provide custom event handling. The methods are the same as those of the WindowListener interface (described above).

  • Simplifies coding. While the WindowListener interface requires you to define ALL its methods, the WindowAdapter class contains a complete set of null methods. You must only override the method (or methods) of interest to provide custom event handling.

For example, the following code may be added to any windows program to properly close its window:

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

These statements define an inner WindowAdapter class with an overriding windowClosing() method and register the inner class as a WindowListener. For custom handling of other window events, the corresponding overriding methods can be inserted.

Example:

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

public class App extends Frame {

Label message = new Label("");

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

public App(String title) {
super(title);
setLayout(new BorderLayout());
addWindowListener(
new WindowAdapter() {
public void windowActivated(WindowEvent e) {
message.setBackground(Color.red);
message.setText("I'm active");
}
public void windowDeactivated(WindowEvent e) {
message.setBackground(Color.lightGray);
message.setText("I'm not active");
}
public void windowClosing(WindowEvent e) {
System.out.println("I'm toast!");
dispose();
System.exit(0);
}
}
);
setForeground(Color.white);
setFont(new Font("SanSerif", Font.ITALIC, 24));
message.setAlignment(Label.CENTER);
add(message);
}
}

Notes:

  1. The class does NOT implement the WindowListener interface

  2. The Label object (message) is used to display whether the window is active or not

  3. Within the application's constructor, the WindowListener is registered to an inner WindowAdapter class that contains overriding methods for handling for window activation, deactivation, and closing

  4. When testing, launch more than one copy of the program. Then, click back and forth between the windows to see activation and deactivation messages.

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 the following class headers is properly coded? (choose two)

  1. public class X extends Frame, WindowAdapter

  1. public class X extends Frame implements WindowAdapter

  2. public class X extends Frame, WindowListener

  3. public class X extends WindowAdapter

  4. public class X extends Frame implements WindowListener

  1. Which of the following fire a window event? (choose two)

  1. minimizing a window

  1. maximizing a window

  2. clicking on an inactive window

  3. dragging a window to a new screen location

  4. dragging on a window border to change its size

  1. Assume that all unseen code is correct. If the following statements define the only event handling methods within a class that implements the WindowListener interface, which one of the statements below is true of attempting to compile and execute?

public void windowOpened(WindowEvent e) {
setBackground(Color.blue);
}
public void windowIconified(WindowEvent e) {
System.exit(0);
}
  1. a compile error will occur

  2. the compile will succeed and the window will have a blue background when it is opened for the first time

  3. the compile will succeed and the program will end if the user minimizes the window

  4. the compile will succeed but a runtime error will occur if the user attempts to close the window

  5. the compile will succeed but the window can never be made active because no windowActivated() method has been defined

  1. Which of the following is not a method of the WindowListener interface? (choose two)

  1. windowDeiconified()

  2. windowMoved()

  3. windowClosed()

  4. windowDeactivated()

  5. windowResized()


13691 bytes more | 40 comments | Printer Friendly Page  Send to a Friend | Score: 4
Posted by jalex on Thursday, March 24, 2005 (00:00:00) (10476 reads)

Java: Arrays -- Multi-dimensional

Go to all tips in Java Notes by Fred Swartz
All arrays in Java are really linear, one-dimensional arrays. However, you can easily build multi-dimensional arrays from these, and Java has features in the language to help you do this.

These examples all use two-dimensional arrays, but the same syntax and coding can easily be extended to arrays of any dimension. By convention two dimensional arrays have rows (horizontal) and columns (vertical). The first subscript selects the row (which is a one-dimensional array itself), and the second subscript selects the element in that row/array.

Visualizing two-dimensional arrays

Assume we have an array, a, with three rows and four columns.
a[0][0]a[0][1]a[0][2]a[0][3]
a[1][0]a[1][1]a[1][2]a[1][3]
a[2][0]a[2][1]a[2][2]a[2][3]
Two-dimensional arrays are usually visualized as a matrix, with rows and columns. This diagram shows the array a with its corresponding subscripts.
    +-----+
    |     |    +-----+-----+-----+-----+
    |a[0] | -> | [0] | [1] | [2] | [3] |
    |     |    +-----+-----+-----+-----+
    +-----+
    |     |    +-----+-----+-----+-----+
    |a[1] | -> | [0] | [1] | [2] | [3] |
    |     |    +-----+-----+-----+-----+
    +-----+
    |     |    +-----+-----+-----+-----+
    |a[2] | -> | [0] | [1] | [2] | [3] |
    |     |    +-----+-----+-----+-----+
    +-----+
In Java two-dimensional arrays are implemented is a one-dimensional array of one-dimensional arrays -- like this.

Declaring and Allocating a two-dimensional array

Let's declare a board for playing the game of tic-tac-toe. It will have three rows (the first subscript) and three columns (the second subscript) and contain an int in each element.
int[][] board = new int[3][3];

Initial values

It's possible to assign initial values to an array when you declare it in a manner very similar to one-dimensional arrays, but with an extra level of braces.
int[][] board = new int[3][3] {{0,0,0},{0,0,0},{0,0,0}};
You must assign values to an element before you use it, either with an initializer as above or assignment.

Example -- drawing the tic-tac-toe board

It's often easiest to use two-dimensional arrays with nested for loops. For example, the following code draws the tic-tac-toe board in a paint method. It assumes that a cell is 10 pixels on a side, and that a positive number represents an X and a negative number represents an O.
for (int row=0; row<3; row++) {
    for (int col=0; col<3; col++) {
        if (board[row][col] > 0) { // draw X
            g.drawLine(col*10, row*10  , col*10+8, row*10+Cool;
            g.drawLine(col*10, row*10+8, col*10+8, row*10  );
        } else if (board[row][col] < 0) { // draw O
            g.drawOval(col*10, row*10, 8, Cool;
        }
    }
}


5 comments | Printer Friendly Page  Send to a Friend | Score: 0
Posted by jalex on Wednesday, March 23, 2005 (00:00:00) (31259 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