import java.awt.*;

import javax.swing.JPanel;



public class FigurePanel extends JPanel {

  // Define constants
  public static final int LINE = 1;

  public static final int RECTANGLE = 2;

  public static final int ROUND_RECTANGLE = 3;

  public static final int OVAL = 4;



  private int type = 1;

  private boolean filled;



  /** Construct a default FigurePanel */

  public FigurePanel() {

  }



  /** Construct a FigurePanel with the specified type */

  public FigurePanel(int type) {

    this.type = type;

  }



  /** Construct a FigurePanel with the specified type and filled */

  public FigurePanel(int type, boolean filled) {

    this.type = type;

    this.filled = filled;

  }



  /** Draw a figure on the panel */

  public void paintComponent(Graphics g) {

    super.paintComponent(g);



    // Get the appropriate size for the figure
    int width = getSize().width;

    int height = getSize().height;



    switch (type) {

      case LINE: // Display two cross lines
        g.setColor(Color.BLACK);

        g.drawLine(10, 10, width - 10, height - 10);

        g.drawLine(width - 10, 10, 10, height - 10);

        break;

      case RECTANGLE: // Display a rectangle
        g.setColor(Color.BLUE);

        if (filled)

          g.fillRect((int)(0.1 * width), (int)(0.1 * height),

            (int)(0.8 * width), (int)(0.8 * height));

        else

          g.drawRect((int)(0.1 * width), (int)(0.1 * height),

            (int)(0.8 * width), (int)(0.8 * height));

        break;

      case ROUND_RECTANGLE: // Display a round-cornered rectangle
        g.setColor(Color.RED);

        if (filled)

          g.fillRoundRect((int)(0.1 * width), (int)(0.1 * height),

            (int)(0.8 * width), (int)(0.8 * height), 20, 20);

        else

          g.drawRoundRect((int)(0.1 * width), (int)(0.1 * height),

            (int)(0.8 * width), (int)(0.8 * height), 20, 20);

        break;

      case OVAL: // Display an oval
        g.setColor(Color.BLACK);

        if (filled)

          g.fillOval((int)(0.1 * width), (int)(0.1 * height),

            (int)(0.8 * width), (int)(0.8 * height));

        else

          g.drawOval((int)(0.1 * width), (int)(0.1 * height),

            (int)(0.8 * width), (int)(0.8 * height));

    }

  }



  /** Set a new figure type */

  public void setType(int type) {

    this.type = type;

    repaint();

  }



  /** Return figure type */

  public int getType() {

    return type;

  }



  /** Set a new filled property */

  public void setFilled(boolean filled) {

    this.filled = filled;

    repaint();

  }



  /** Check if the figure is filled */

  public boolean isFilled() {

    return filled;

  }



  /** Specify preferred size */

  public Dimension getPreferredSize() {

    return new Dimension(80, 80);

  }

}