Contents
- ./ColoredBackground2.java
- ./ColoredBackgroundRefactored.java
- ./ColoredBackground.java
- ./WindowEventDemo.java
./ColoredBackground2.java 1/4
[top][prev][next]
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
* When a button is pressed, it colors the background of the panel the
* appropriate color.
*
* Uses a separate class to update the background.
*
* @author sarasprenkle
*
*/
public class ColoredBackground2 extends JFrame {
public ColoredBackground2() {
setTitle("Colored Background - Separate class");
setBackground(Color.white);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container cp = getContentPane();
cp.setLayout(new FlowLayout());
// create buttons and add to content pane
JButton red = new JButton("Red");
red.setForeground(Color.red);
JButton green = new JButton("Green");
green.setForeground(Color.GREEN);
ColorAction yellowAction = new ColorAction(Color.green, this);
cp.add(green);
JButton blue = new JButton("Blue");
blue.setForeground(Color.blue);
ColorAction blueAction = new ColorAction(Color.blue, this);
ColorAction redAction = new ColorAction(Color.red, this);
green.addActionListener(yellowAction);
blue.addActionListener(blueAction);
red.addActionListener(redAction);
cp.add(red);
cp.add(blue);
pack();
setVisible(true);
}
/**
* @param args
*/
public static void main(String[] args) {
ColoredBackground cb = new ColoredBackground();
}
}
/**
* This class could (maybe *should*) go in its own file.
*
*/
class ColorAction implements ActionListener {
private Color backgroundColor;
private JFrame frame;
public ColorAction(Color c, JFrame frame) {
backgroundColor = c;
this.frame = frame;
}
public void actionPerformed(ActionEvent evt1) {
frame.setBackground(backgroundColor);
frame.repaint();
}
}
./ColoredBackgroundRefactored.java 2/4
[top][prev][next]
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
* When a button is pressed, it colors the background of the panel the
* appropriate color.
* <p>
* Demonstrates using an anonymous inner class
*
* @author Sara Sprenkle
*
*/
public class ColoredBackgroundRefactored extends JFrame {
public ColoredBackgroundRefactored() {
setTitle("Colored Background - Anonymous Inner Class");
setBackground(Color.white);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container cp = getContentPane();
cp.setLayout(new FlowLayout());
// create buttons and add to content pane
makeButton("Green", Color.green);
makeButton("Blue", Color.blue);
makeButton("Red", Color.red);
pack();
setVisible(true);
}
/**
* Make a button with the given label. Pressing the button will make the
* panel background the given background color.
*
* @param label
* @param backgroundColor
*/
private void makeButton(String label, final Color backgroundColor) {
JButton button = new JButton(label);
button.setBackground(backgroundColor);
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
setBackground(backgroundColor);
repaint();
}
});
getContentPane().add(button);
}
/**
* Example of inner class that does event handling
*
*/
class ColorAction implements ActionListener {
private Color backgroundColor;
public ColorAction(Color c) {
backgroundColor = c;
}
public void actionPerformed(ActionEvent evt1) {
// ColorAction does not have a setBackground method
// but ColorBackground/JFrame does
setBackground(backgroundColor);
repaint();
}
}
/**
* @param args
*/
public static void main(String[] args) {
ColoredBackground cb = new ColoredBackground();
}
}
./ColoredBackground.java 3/4
[top][prev][next]
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
* When a button is pressed, it colors the background of the panel the
* appropriate color.
*
* Uses an inner class.
*
* @author sarasprenkle
*
*/
public class ColoredBackground extends JFrame {
public ColoredBackground() {
setTitle("Colored Background - Inner Class");
setBackground(Color.white);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container cp = getContentPane();
cp.setLayout(new FlowLayout());
// create buttons and add to content pane
JButton red = new JButton("Red");
red.setForeground(Color.red);
JButton green = new JButton("Green");
green.setForeground(Color.GREEN);
ColorAction yellowAction = new ColorAction(Color.green);
cp.add(green);
JButton blue = new JButton("Blue");
blue.setForeground(Color.blue);
ColorAction blueAction = new ColorAction(Color.blue);
ColorAction redAction = new ColorAction(Color.red);
green.addActionListener(yellowAction);
blue.addActionListener(blueAction);
red.addActionListener(redAction);
cp.add(red);
cp.add(blue);
pack();
setVisible(true);
}
/**
* Example of inner class that does event handling
*
*/
private class ColorAction implements ActionListener {
private Color backgroundColor;
public ColorAction(Color c) {
backgroundColor = c;
}
public void actionPerformed(ActionEvent evt1) {
// ColorAction does not have a setBackground method
// but ColorBackground/JFrame does
setBackground(backgroundColor);
repaint();
}
}
/**
* @param args
*/
public static void main(String[] args) {
ColoredBackground cb = new ColoredBackground();
}
}
./WindowEventDemo.java 4/4
[top][prev][next]
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
/**
* Prints information whenever Window event occurs
*
* @author sprenkle
*
*/
public class WindowEventDemo extends JPanel implements WindowListener,
WindowFocusListener, WindowStateListener {
final static String newline = "\n";
final static String space = " ";
static JFrame frame;
JTextArea display;
public WindowEventDemo() {
super(new BorderLayout());
display = new JTextArea();
display.setEditable(false);
JScrollPane scrollPane = new JScrollPane(display);
scrollPane.setPreferredSize(new Dimension(500, 450));
add(scrollPane, BorderLayout.CENTER);
frame.addWindowListener(this);
frame.addWindowFocusListener(this);
frame.addWindowStateListener(this);
checkWindowManager();
}
// Some window managers don't support all window states.
// For example, dtwm doesn't support true maximization,
// but mimics it by resizing the window to be the size
// of the screen. In this case the window does not fire
// the MAXIMIZED_ constants on the window's state listener.
// Microsoft Windows supports MAXIMIZED_BOTH, but not
// MAXIMIZED_VERT or MAXIMIZED_HORIZ.
public void checkWindowManager() {
Toolkit tk = frame.getToolkit();
if (!(tk.isFrameStateSupported(Frame.ICONIFIED))) {
displayMessage("Your window manager doesn't support ICONIFIED.");
}
if (!(tk.isFrameStateSupported(Frame.MAXIMIZED_VERT))) {
displayMessage("Your window manager doesn't support MAXIMIZED_VERT.");
}
if (!(tk.isFrameStateSupported(Frame.MAXIMIZED_HORIZ))) {
displayMessage("Your window manager doesn't support MAXIMIZED_HORIZ.");
}
if (!(tk.isFrameStateSupported(Frame.MAXIMIZED_BOTH))) {
displayMessage("Your window manager doesn't support MAXIMIZED_BOTH.");
} else {
displayMessage("Your window manager supports MAXIMIZED_BOTH.");
}
}
public void windowClosing(WindowEvent e) {
displayMessage("WindowListener method called: windowClosing.");
// A pause so user can see the message before
// the window actually closes.
ActionListener task = new ActionListener() {
boolean alreadyDisposed = false;
public void actionPerformed(ActionEvent e) {
if (!alreadyDisposed) {
alreadyDisposed = true;
frame.dispose();
} else { // make sure the program exits
System.exit(0);
}
}
};
Timer timer = new Timer(500, task); // fire every half second
timer.setInitialDelay(2000); // first delay 2 seconds
timer.start();
}
public void windowClosed(WindowEvent e) {
// This will only be seen on standard output.
displayMessage("WindowListener method called: windowClosed.");
}
public void windowOpened(WindowEvent e) {
displayMessage("WindowListener method called: windowOpened.");
}
public void windowIconified(WindowEvent e) {
displayMessage("WindowListener method called: windowIconified.");
}
public void windowDeiconified(WindowEvent e) {
displayMessage("WindowListener method called: windowDeiconified.");
}
public void windowActivated(WindowEvent e) {
displayMessage("WindowListener method called: windowActivated.");
}
public void windowDeactivated(WindowEvent e) {
displayMessage("WindowListener method called: windowDeactivated.");
}
public void windowGainedFocus(WindowEvent e) {
displayMessage("WindowFocusListener method called: windowGainedFocus.");
}
public void windowLostFocus(WindowEvent e) {
displayMessage("WindowFocusListener method called: windowLostFocus.");
}
public void windowStateChanged(WindowEvent e) {
displayStateMessage(
"WindowStateListener method called: windowStateChanged.", e);
}
void displayMessage(String msg) {
display.append(msg + newline);
System.out.println(msg);
}
void displayStateMessage(String prefix, WindowEvent e) {
int state = e.getNewState();
int oldState = e.getOldState();
String msg = prefix + newline + space + "New state: "
+ convertStateToString(state) + newline + space + "Old state: "
+ convertStateToString(oldState);
display.append(msg + newline);
System.out.println(msg);
}
String convertStateToString(int state) {
if (state == Frame.NORMAL) {
return "NORMAL";
}
if ((state & Frame.ICONIFIED) != 0) {
return "ICONIFIED";
}
// MAXIMIZED_BOTH is a concatenation of two bits, so
// we need to test for an exact match.
if ((state & Frame.MAXIMIZED_BOTH) == Frame.MAXIMIZED_BOTH) {
return "MAXIMIZED_BOTH";
}
if ((state & Frame.MAXIMIZED_VERT) != 0) {
return "MAXIMIZED_VERT";
}
if ((state & Frame.MAXIMIZED_HORIZ) != 0) {
return "MAXIMIZED_HORIZ";
}
return "UNKNOWN";
}
/**
* Create the GUI and show it. For thread safety, this method should be
* invoked from the event-dispatching thread.
*/
private static void createAndShowGUI() {
// Make sure we have nice window decorations.
JFrame.setDefaultLookAndFeelDecorated(true);
// Create and set up the window.
frame = new JFrame("WindowEventDemo");
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
// Create and set up the content pane.
JComponent newContentPane = new WindowEventDemo();
newContentPane.setOpaque(true); // content panes must be opaque
frame.setContentPane(newContentPane);
// Display the window.
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
createAndShowGUI();
}
}
Generated by GNU enscript 1.6.4.