www.pudn.com > ThinkinginJava4thEdition(SourceCode).zip > BangBean.java


//: bangbean/BangBean.java 
// A graphical Bean. 
package bangbean; 
import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 
import java.io.*; 
import java.util.*; 
 
public class 
BangBean extends JPanel implements Serializable { 
  private int xm, ym; 
  private int cSize = 20; // Circle size 
  private String text = "Bang!"; 
  private int fontSize = 48; 
  private Color tColor = Color.RED; 
  private ActionListener actionListener; 
  public BangBean() { 
    addMouseListener(new ML()); 
    addMouseMotionListener(new MML()); 
  } 
  public int getCircleSize() { return cSize; } 
  public void setCircleSize(int newSize) { 
    cSize = newSize; 
  } 
  public String getBangText() { return text; } 
  public void setBangText(String newText) { 
    text = newText; 
  } 
  public int getFontSize() { return fontSize; } 
  public void setFontSize(int newSize) { 
    fontSize = newSize; 
  } 
  public Color getTextColor() { return tColor; } 
  public void setTextColor(Color newColor) { 
    tColor = newColor; 
  } 
  public void paintComponent(Graphics g) { 
    super.paintComponent(g); 
    g.setColor(Color.BLACK); 
    g.drawOval(xm - cSize/2, ym - cSize/2, cSize, cSize); 
  } 
  // This is a unicast listener, which is 
  // the simplest form of listener management: 
  public void addActionListener(ActionListener l) 
  throws TooManyListenersException { 
    if(actionListener != null) 
      throw new TooManyListenersException(); 
    actionListener = l; 
  } 
  public void removeActionListener(ActionListener l) { 
    actionListener = null; 
  } 
  class ML extends MouseAdapter { 
    public void mousePressed(MouseEvent e) { 
      Graphics g = getGraphics(); 
      g.setColor(tColor); 
      g.setFont( 
        new Font("TimesRoman", Font.BOLD, fontSize)); 
      int width = g.getFontMetrics().stringWidth(text); 
      g.drawString(text, (getSize().width - width) /2, 
        getSize().height/2); 
      g.dispose(); 
      // Call the listener's method: 
      if(actionListener != null) 
        actionListener.actionPerformed( 
          new ActionEvent(BangBean.this, 
            ActionEvent.ACTION_PERFORMED, null)); 
    } 
  } 
  class MML extends MouseMotionAdapter { 
    public void mouseMoved(MouseEvent e) { 
      xm = e.getX(); 
      ym = e.getY(); 
      repaint(); 
    } 
  } 
  public Dimension getPreferredSize() { 
    return new Dimension(200, 200); 
  } 
} ///:~