public class HelloAgain
class HelloComponent
1: // HelloAgain.java
3: import java.awt.*;
4: import java.awt.event.*;
5: import javax.swing.*;
8: public class HelloAgain
9: {
10: public static void main(String[] args)
11: {
12: JFrame frame = new JFrame("HelloJava4");
13: frame.getContentPane().add(new HelloComponent("Hello Java!"));
14: frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
15: frame.setSize(300, 300);
16: frame.setVisible(true);
17: }
18: }
21: class HelloComponent
22: extends JComponent
23: implements MouseMotionListener, ActionListener, Runnable
24: {
25: String theMessage;
26: int messageX = 125, messageY = 95; // Coordinates of the message
27: boolean blinkState;
29: JButton colorChangeButton;
31: int colorIndex; // Current index into array of colors
32: static Color[] someColors = {Color.black, Color.red, Color.green,
33: Color.blue, Color.magenta};
35: public HelloComponent(String message)
36: {
37: theMessage = message;
38: colorChangeButton = new JButton("Change Color");
39: setLayout(new FlowLayout());
40: add(colorChangeButton);
41: colorChangeButton.addActionListener(this);
42: addMouseMotionListener(this);
43: Thread t = new Thread(this);
44: t.start();
45: }
48: public void paintComponent(Graphics g)
49: {
50: g.setColor(blinkState ? getBackground() : currentColor());
51: g.drawString(theMessage, messageX, messageY);
52: }
54:
55: public void mouseDragged(MouseEvent e)
56: {
57: messageX = e.getX();
58: messageY = e.getY();
59: repaint();
60: }
61: public void mouseMoved(MouseEvent e) { }
64: public void actionPerformed(ActionEvent e)
65: {
66: if (e.getSource() == colorChangeButton)
67: changeColor();
68: }
71: synchronized private void changeColor()
72: {
73: if (++colorIndex == someColors.length)
74: colorIndex = 0;
75: setForeground(currentColor());
76: repaint();
77: }
80: synchronized private Color currentColor()
81: {
82: return someColors[colorIndex];
83: }
85: public void run()
86: {
87: try
88: {
89: while(true)
90: {
91: blinkState = !blinkState; // Toggle blinkState.
92: repaint(); // Show the change.
93: Thread.sleep(300);
94: }
95: }
96: catch (InterruptedException ie) { }
97: }
98: }