|
|
|
1000 Java Tips ebook
|
|
 

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

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:
-
The class implements the
WindowListener
interface in order to handle window events
-
The TextArea object (log) is used to display a scrolling list of
messages pertaining to window events
-
Within the application's
constructor, the WindowListener is registered
-
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)
-
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 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:
-
The class does NOT implement
the WindowListener
interface
-
The Label object (message) is used to display whether the window
is active or not
-
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
-
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
-
Which of the following class
headers is properly coded? (choose two)
-
public class X extends Frame, WindowAdapter
-
public class X extends Frame implements WindowAdapter
-
public class X extends Frame, WindowListener
-
public class X extends WindowAdapter
-
public class X extends Frame implements WindowListener
-
Which of the following fire
a window event? (choose two)
-
minimizing a window
-
maximizing a window
-
clicking on an inactive
window
-
dragging a window to a new
screen location
-
dragging on a window
border to change its size
-
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); }
|
-
a compile error will occur
-
the compile will succeed
and the window will have a blue background when it is opened for the first
time
-
the compile will succeed
and the program will end if the user minimizes the window
-
the compile will succeed
but a runtime error will occur if the user attempts to close the window
-
the compile will succeed but the window can never be made active because
no windowActivated()
method has been defined
-
Which of the following is
not a method of the WindowListener
interface? (choose two)
-
windowDeiconified()
-
windowMoved()
-
windowClosed()
-
windowDeactivated()
-
windowResized() Printer Friendly Page
Send to a Friend
..
Search here again if you need more info!
|
|
|