Safari Books Online is a digital library providing on-demand subscription access to thousands of learning resources.
Well, now that we have those concepts under control, we can move on to some fun stuff. HelloJava3 brings us a new graphical interface component: the JButton.[4] We add a JButton component to our application that changes the color of our text each time the button is pressed. The draggable-message capability is still there, too. Our new example is:
[4] Why isn't it just called a Button? Button is the name that was used in Java's original GUI toolkit, the Abstract Windowing Toolkit (AWT). AWT had some significant shortcomings, so it was extended and essentially replaced by Swing in Java 2. Since AWT already took the reasonable names such as Button and MenuBar, Swing user interface components have names that are prefixed with "J", like JButton and JMenuBar.
//file: HelloJava3.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class HelloJava3
extends JComponent
implements MouseMotionListener, ActionListener {
// Coordinates for the message
int messageX = 125, messageY = 95;
String theMessage;
JButton theButton;
// Current index into someColors
int colorIndex;
static Color[] someColors = { Color.black, Color.red,
Color.green, Color.blue, Color.magenta };
public HelloJava3(String message) {
theMessage = message;
theButton = new JButton("Change Color");
setLayout(new FlowLayout( ));
add(theButton);
theButton.addActionListener(this);
addMouseMotionListener(this);
}
public void paintComponent(Graphics g) {
g.drawString(theMessage, messageX, messageY);
}
public void mouseDragged(MouseEvent e) {
// Save the mouse coordinates and paint the message.
messageX = e.getX( );
messageY = e.getY( );
repaint( );
}
public void mouseMoved(MouseEvent e) {}
public void actionPerformed(ActionEvent e) {
// Did somebody push our button?
if (e.getSource( ) == theButton)
changeColor( );
}
synchronized private void changeColor( ) {
// Change the index to the next color.
if (++colorIndex == someColors.length)
colorIndex = 0;
setForeground(currentColor( )); // Use the new color.
repaint( ); // Paint again so we can see the change.
}
synchronized private Color currentColor( ) {
return someColors[colorIndex];
}
public static void main(String[] args) {
JFrame f = new JFrame("HelloJava3");
// Make the application exit when the window is closed.
f.addWindowListener(new WindowAdapter( ) {
public void windowClosing(WindowEvent we) { System.exit(0); }
});
f.setSize(300, 300);
f.getContentPane( ).add(new HelloJava3("Hello, Java!"));
f.setVisible(true);
}
}