Question:
How can I detect that a window has been resized?
I can detect events such as WindowIconified,
WindowDeiconified, WindowOpening, WindowClosing, etc., but not the resize event.
Answer:
Figuring out how to detect a window resizing isn't immediately obvious
because you might expect the event to be represented by a WindowEvent.
In fact, window resizing is just a specific instance of component
resizing, which is signalled by a ComponentEvent. The
ComponentEvent.COMPONENT_RESIZED identifier indicates that a ComponentEvent
is signalling a resize. To receive the event, you must add a
ComponentListener to the window. Rather than implementing all the
methods required by a ComponentListener, it will suffice to subclass
ComponenetAdapter, and override its componentResized()
method. The following program shows how to do this, displaying the
new dimensions of a window as it is resized.
import java.awt.*;
import java.awt.event.*;
public class ResizeWindow extends Frame {
Label label;
public void showSize() {
label.setText(getWidth() + ", " + getHeight());
}
public ResizeWindow() {
label = new Label();
label.setAlignment(Label.CENTER);
add(label, BorderLayout.CENTER);
addComponentListener(new ComponentAdapter() {
public void componentResized(ComponentEvent e) {
ResizeWindow.this.showSize();
}
});
}
public static final void main(String[] args) {
Frame frame = new ResizeWindow();
WindowListener exitListener;
exitListener = new WindowAdapter() {
public void windowClosing(WindowEvent e) {
Window window = e.getWindow();
window.setVisible(false);
window.dispose();
System.exit(0);
}
};
frame.addWindowListener(exitListener);
frame.setSize(200, 200);
frame.setVisible(true);
}
}