www.pudn.com > java_celluar.zip > CelluarControl.java


package celluar;

import java.awt.event.*;
import java.awt.*;

/**
 * Title:        Game of Life
 * Description:
 * Copyright:    Copyright (c) 2003
 * Company:      Http://agents.yeah.net
 * @author Keats
 * @version 1.0
 */

final class CelluarControl extends Frame {
  celluar localcell;//主程序的本地拷贝,以便可以更新主程序中的值
  Label labelSize = new Label();
  TextField txtSize = new TextField();
  Label labelPer = new Label();
  TextField txtPer = new TextField();
  Label label1 = new Label();
  Label label2 = new Label();
  Label labelRefreshSteps = new Label();
  TextField txtRefreshSteps = new TextField();
  Label label3 = new Label();
  Button btnConfirm = new Button();
  Button btnCancel = new Button();
  Button btnDefault = new Button();
  Label label4 = new Label();
  public CelluarControl(celluar cl) {
    super("参数设置");
    localcell=cl;
    try {
      jbInit();
    }
    catch(Exception e) {
      e.printStackTrace();
    }
  }
  private void jbInit() throws Exception {
    this.setBackground(Color.white);
    this.setLayout(null);
    this.setBounds(0,0,300,300);

    this.addWindowListener(new java.awt.event.WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        this_windowClosing(e);
      }
    });

    txtSize.setText("100");
    txtSize.setBounds(new Rectangle(102, 44, 53, 19));
    labelSize.setText("世界的大小:");
    labelSize.setBounds(new Rectangle(20, 44, 73, 22));
    labelPer.setText("个体数量占世界的比例:");
    labelPer.setBounds(new Rectangle(20, 92, 134, 18));
    txtPer.setText("0.08");
    txtPer.setBounds(new Rectangle(161, 93, 56, 18));
    label1.setText("(最大尺寸150,取值越大运行速度越慢)");
    label1.setBounds(new Rectangle(28, 67, 228, 20));
    label2.setText("(取值范围(0,1))");
    label2.setBounds(new Rectangle(27, 113, 140, 18));
    labelRefreshSteps.setText("刷新的频率:");
    labelRefreshSteps.setBounds(new Rectangle(18, 135, 79, 20));
    txtRefreshSteps.setText("1");
    txtRefreshSteps.setBounds(new Rectangle(98, 134, 61, 20));
    label3.setText("(每演化几步刷新一次)");
    label3.setBounds(new Rectangle(26, 159, 133, 22));
    btnConfirm.setLabel("确定");
    btnConfirm.setBounds(new Rectangle(18, 190, 59, 21));
    btnConfirm.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        btnConfirm_actionPerformed(e);
      }
    });
    btnCancel.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        btnCancel_actionPerformed(e);
      }
    });
    btnCancel.setBounds(new Rectangle(92, 190, 59, 21));
    btnCancel.setLabel("取消");
    btnDefault.setLabel("默认值");
    btnDefault.setBounds(new Rectangle(165, 190, 72, 21));
    btnDefault.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        btnDefault_actionPerformed(e);
      }
    });
    label4.setText("keatskk@sina.com");
    label4.setBounds(new Rectangle(59, 220, 152, 20));
    this.add(labelSize, null);
    this.add(label1, null);
    this.add(labelPer, null);
    this.add(labelRefreshSteps, null);
    this.add(label2, null);
    this.add(label3, null);
    this.add(btnConfirm, null);
    this.add(txtRefreshSteps, null);
    this.add(txtSize, null);
    this.add(txtPer, null);
    this.add(btnCancel, null);
    this.add(btnDefault, null);
    this.add(label4, null);
    reset();
  }

    public void reset(){
    //设置所有文本框中的数值为初始值
    txtSize.setText(Integer.toString(localcell.size));
    txtPer.setText(Double.toString(localcell.per));
    txtRefreshSteps.setText(Integer.toString(localcell.refreshSteps));
  }

  void btnConfirm_actionPerformed(ActionEvent e) {
      //用文本框中的参数数值更新主程序中的响应参数
    localcell.size=Integer.parseInt(txtSize.getText());
    if (localcell.size<=0) return;

    localcell.per=Double.valueOf(txtPer.getText()).doubleValue();
    if (localcell.per<=0||localcell.per>=1) return;

    localcell.refreshSteps=Integer.parseInt(txtRefreshSteps.getText());
    if (localcell.refreshSteps<1) return;

    localcell.reinit();
    localcell.running=true;
    localcell.pausebutton.setLabel("Stop");

    this.hide();
    this.dispose();
  }

  void btnCancel_actionPerformed(ActionEvent e) {
    localcell.running=true;
    localcell.pausebutton.setLabel("Stop");
    this.hide();
    this.dispose();
  }

  void btnDefault_actionPerformed(ActionEvent e) {
    txtSize.setText("50");
    txtPer.setText("0.1");
    txtRefreshSteps.setText("1");
  }

  void this_windowClosing(WindowEvent e) {
      localcell.running=true;
      localcell.pausebutton.setLabel("Stop");
      this.hide();
      this.dispose();
  }
}