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"!.

Java Lesson 38: The WindowListener interface and the WindowAdapter class

JavaFAQ Home » Java Lessons by Jon Huhtala Go to all tips in Java Lessons by Jon Huhtala


Bookmark and Share
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()


 Printer Friendly Page  Printer Friendly Page
 Send to a Friend  Send to a Friend

.. Bookmark and Share

Search here again if you need more info!
Custom Search



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