Source of HelloAgain.java


  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: }