import java.awt.*;
import java.awt.font.*;

class CharacterPanel extends Panel {
  
  int borderGap = 10;
  char character;
  Color color = Color.black;
  Font font = new Font("Serif", Font.PLAIN, 10);
  
  public CharacterPanel() {
    super();
    character = '\u0000';
  }
  public CharacterPanel(char ch) {
    super();
    character = ch;
  }
  public CharacterPanel(LayoutManager layout) {
    super(layout);
    character = '\u0000';
  }
  public CharacterPanel(LayoutManager layout, char ch) {
    super(layout);
    character = ch;
  }
  
  public void setBorderGap(int bgap) { borderGap = bgap; }
  public int getBorderGap() { return borderGap; }
  public void setCharacter(char ch) { character = ch; }
  public void setCharacter(int ch) { character = (char)ch; }
  public char getCharacter() { return character; }
  public void setColor(Color c) { color = c; }
  public Color getColor() { return color; }
  public void setFont(Font f) { font = f; }
  public Font getFont() { return font; }
  
  public void paint(Graphics g) {
    Graphics2D g2 = (Graphics2D)g;
    Shape s = font.createGlyphVector(g2.getFontRenderContext(),
        new String(new char[] {character})).getGlyphOutline(0);
    java.awt.geom.Rectangle2D r = s.getBounds2D();
    double scaleFactor = Math.min((getWidth() - 2 * borderGap) / r.getWidth(),
        (getHeight() - 2 * borderGap) / r.getHeight());
    if (scaleFactor > 0) {  // only draw character if there's enough room
      g2.scale(scaleFactor, scaleFactor);
      g2.translate(-r.getX() + (getWidth() / scaleFactor - r.getWidth()) / 2,
          -r.getY() + (getHeight() / scaleFactor - r.getHeight()) / 2);
      g2.setPaint(color);
      g2.setStroke(new BasicStroke((float)(2 / scaleFactor)));
      g2.draw(s);
      g2.fill(s);
    }
  }
  
}

