⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gardener.java

📁 源码为科学出版社出版的英文<java设计模式>(影印版)所用的所有例子程序
💻 JAVA
字号:
import java.awt.*;
import java.awt.event.*;

//illustrates use of Abstract Factory pattern
public class Gardener
    extends Frame
    implements ActionListener {
  private Checkbox Vegie, Annual, Peren;
  private Button Center, Border, Shade, Quit;
  private Garden garden = null;
  private GardenPanel gardenPlot;
  private String borderPlant = "", centerPlant = "", shadePlant = "";

  public Gardener() {
    super("Garden planner");
    setGUI();
  }

  //----------------------------------
  private void setGUI() {
    setBackground(Color.lightGray);
    setLayout(new GridLayout(1, 2));
    Panel left = new Panel();
    add(left);
    Panel right = new Panel();
    add(right);

    //create label and 3 radio buttons on left side
    left.setLayout(new GridLayout(4, 1));
    left.add(new Label("Garden type"));
    CheckboxGroup grp = new CheckboxGroup();
    Vegie = new Checkbox("Vegetable", grp, false);
    Annual = new Checkbox("Annual", grp, false);
    Peren = new Checkbox("Perennial", grp, false);
    left.add(Vegie);
    left.add(Annual);
    left.add(Peren);
    Vegie.addItemListener(new VegieListener());
    Peren.addItemListener(new PerenListener());
    Annual.addItemListener(new AnnualListener());

    //now create right side
    right.setLayout(new GridLayout(2, 1));
    gardenPlot = new GardenPanel();
    gardenPlot.setBackground(Color.white);
    Panel botRight = new Panel();

    right.add(gardenPlot);
    right.add(botRight);
    Center = new Button("Central");
    Border = new Button("Border");
    Shade = new Button("Shade");
    Quit = new Button("Quit");
    botRight.add(Center);
    Center.addActionListener(this);
    botRight.add(Border);
    Border.addActionListener(this);
    botRight.add(Shade);
    Shade.addActionListener(this);
    botRight.add(Quit);
    Quit.addActionListener(this);
    setBounds(200, 200, 400, 300);
    setVisible(true);

  }

  //----------------------------------
  public void actionPerformed(ActionEvent e) {
    Object obj = e.getSource();
    if (obj == Center) {
      setCenter();
    }
    if (obj == Border) {
      setBorder();
    }
    if (obj == Shade) {
      setShade();
    }
    if (obj == Quit) {
      System.exit(0);
    }
  }

  //----------------------------------
  private void setCenter() {
    if (garden != null) {
      centerPlant = garden.getCenter();
    }
    gardenPlot.repaint();
  }

  private void setBorder() {
    if (garden != null) {
      borderPlant = garden.getBorder();
    }
    gardenPlot.repaint();
  }

  private void setShade() {
    if (garden != null) {
      shadePlant = garden.getShade();
    }
    gardenPlot.repaint();
  }

  private void clearPlants() {
    shadePlant = "";
    centerPlant = "";
    borderPlant = "";
    gardenPlot.repaint();
  }

  //----------------------------------
  static public void main(String argv[]) {
    new Gardener();
  }

//--------------------------------
  class GardenPanel
      extends Panel {
    public void paint(Graphics g) {
      Dimension sz = getSize();
      g.setColor(Color.lightGray);
      g.fillArc(0, 0, 80, 80, 0, 360);
      g.setColor(Color.black);
      g.drawRect(0, 0, sz.width - 1, sz.height - 1);
      g.drawString(centerPlant, 100, 50);
      g.drawString(borderPlant, 75, 120);
      g.drawString(shadePlant, 10, 40);
    }
  }

  //-----------------------------
  class VegieListener
      implements ItemListener {
    public void itemStateChanged(ItemEvent e) {
      garden = new VegieGarden();
      clearPlants();
    }
  }

  //-----------------------------
  class PerenListener
      implements ItemListener {
    public void itemStateChanged(ItemEvent e) {
      garden = new PerennialGarden();
      clearPlants();
    }
  }

  //-----------------------------
  class AnnualListener
      implements ItemListener {
    public void itemStateChanged(ItemEvent e) {
      garden = new AnnualGarden();
      clearPlants();
    }
  }

} //end of Gardener class

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -