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

📄 yuanjian.java

📁 Java门电路画图器 基本功能: 1。文件的保存
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
package ding;

import java.awt.*;
import java.awt.geom.*;
import java.awt.event.*;
import javax.swing.*;
import java.lang.Math;

/**
 * <p>Title: 门电路画图器</p>
 * <p>Description: www.1shu.net</p>
 * <p>Copyright: Copyright (c) 2003</p>
 * <p>Company: EyeSome</p>
 * @author ES
 * @version 1.0
 */

///////////////////////////////////////
//  定义元件的类
///////////////////////////////////////

public class yuanjian
    extends yjBase {
  yjRec inRec[];
  yjLine inLine[];
  yjCircle inCircle[];
  yjStr inStr[];
  yjArc inArc[];
  int x, y;


  public yuanjian(){

  }
  public yuanjian(yjRec inRec[], yjLine inLine[], yjCircle inCircle[],
                  yjStr inStr[], yjArc inArc[]) {
    int i, j;
    int arrayLen;
    /////////////////
    // init inRec
    if (inRec != null) {
      arrayLen = inRec.length;
      this.inRec = new yjRec[arrayLen];
      for (i = 0; i < arrayLen; i++) {
        this.inRec[i] = inRec[i].getValue();
      }
    }
    /////////////////
    // init inLine
    if (inLine != null) {
      arrayLen = inLine.length;
      this.inLine = new yjLine[arrayLen];
      for (i = 0; i < arrayLen; i++) {
        this.inLine[i] = inLine[i].getValue();
      }
    }
    //////////////////
    // init inCircle
    if (inCircle != null) {
      arrayLen = inCircle.length;
      this.inCircle = new yjCircle[arrayLen];
      for (i = 0; i < arrayLen; i++) {
        this.inCircle[i] = inCircle[i].getValue();
      }
    }
    /////////////////
    //  init inStr
    if (inStr != null) {
      arrayLen = inStr.length;
      this.inStr = new yjStr[arrayLen];
      for (i = 0; i < arrayLen; i++) {
        this.inStr[i] = inStr[i].getValue();
      }
    }
    /////////////////
    // init inArc
    if (inArc != null) {
      arrayLen = inArc.length;
      this.inArc = new yjArc[arrayLen];
      for (i = 0; i < arrayLen; i++) {
        this.inArc[i] = inArc[i].getValue();
      }
    }
    xyRange();
  }

  public yuanjian getValue(){
    yuanjian yjtmp= new yuanjian(this.inRec, this.inLine, this.inCircle,
                  this.inStr,this.inArc);
    yjtmp.des = this.des;
    yjtmp.id = this.id;
    return yjtmp;
  }
  /**
   *  移动方法
   */
  public boolean yjMovie(int x, int y) {
    int xChg, yChg;
    xChg = x - this.x;
    yChg = y - this.y;
    int i, j;
    int tmpLen;
    Color c = Color.white;
    yjBase tmpYJ[] = new yjBase[100]; //暂时初始化100个试试
    for (j = 0; j < 5; j++) {
      switch (j) {
        case 0:
          tmpYJ = this.inRec;
          break;
        case 1:
          tmpYJ = this.inLine;
          break;
        case 2:
          tmpYJ = this.inCircle;
          break;
        case 3:
          tmpYJ = this.inStr;
          break;
        case 4:
          tmpYJ = this.inArc;
          break;
      }
      //System.out.println("^^^^^^^^ tmpYJ[i].x:" + this.inRec[0].x +
      //                       "  xChg,tmpYJ[i].y:" + tmpYJ[0].y);
      //if (tmpYJ[0] == this.inRec[0]) System.out.println("相等----");
      if (tmpYJ != null) { //如果该构件的为空,则跳过
        tmpLen = tmpYJ.length; // 求构件的数组大小,即该构件的数量
        for (i = 0; i < tmpLen; i++) { // 改变每个构件的坐标
          tmpYJ[i].yjMovie(tmpYJ[i].x + xChg, tmpYJ[i].y + yChg);
          //System.out.println("^^^^^^^^ xChg:" + xChg + "  yChg:" + yChg);
          //System.out.println("^^^^^^^^ tmpYJ[i].x:" + tmpYJ[i].x +
          //                   "  xChg,tmpYJ[i].y:" + tmpYJ[i].y+"    i:"+i+" j"+j);
          //System.out.println("VVVVVV  i:"+i+" j"+j);
        }
      }
    }
    //xyRange();
    minX = minX + xChg;
    minY = minY + yChg;
    maxX = maxX + xChg;
    maxY = maxY + yChg;
    this.x = minX;
    this.y = minY;
    return true;
  }

  /**
   * 画出此门电路
   */
  public void yjpaint(Graphics2D g) {
    int i, j, tmiX = -1, tmiY = -1, tmaX = -1, tmaY = -1;
    int tmpLen;
    Color c = Color.white;
    yjBase tmpYJ[] = new yjBase[100]; //暂时初始化100个试试
    for (j = 0; j < 5; j++) {
      switch (j) {
        case 0:
          tmpYJ = inRec;
          c = Color.white;
          break;
        case 1:
          tmpYJ = inLine;
          c = Color.yellow;
          break;
        case 2:
          tmpYJ = inCircle;

          break;
        case 3:
          tmpYJ = inStr;
          c = Color.cyan;
          break;
        case 4:
          tmpYJ = inArc;
          c = Color.white;
          break;
      }
      if (tmpYJ != null) { //如果该构件的为空,则跳过
        tmpLen = tmpYJ.length; // 求构件的数组大小,即该构件的数量
        for (i = 0; i < tmpLen; i++) { // 开始画构件
          if(tmpYJ[i].fillFlag==1){
            c = Color.yellow;
          }
          tmpYJ[i].yjpaint(g, c);
        }
      }
    }
  }

  public void yjpaint(Graphics2D g, Color c) {
  }

  /**
   * 画虚线
   */
  public void yjpaintDashed(int x1, int y1, int x2, int y2, Graphics2D g) {
    int i, n, xiebian;
    xiebian = (int) Math.sqrt( (x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
    n = xiebian / 15;
    for (i = 0; i < n; i++) {
      //g.drawLine
    }
  }

  /**
   * 根据电路元件范围画虚框
   */
  public void yjpaintArc(Graphics2D g, Color c) {
    float[] dash = {
        1.0f, 5.0f};
    BasicStroke newstroke = new BasicStroke(1.0f, BasicStroke.CAP_BUTT,
                                            BasicStroke.JOIN_MITER, 1.0f, dash,
                                            0.0f);
    g.setStroke(newstroke);
    g.setColor(c);
    g.drawRect(minX, minY, maxX - minX, maxY - minY);
  }

  public void xyRange() {
    int i, j, tmiX = -1, tmiY = -1, tmaX = -1, tmaY = -1;
    int tmpLen;
    yjBase tmpYJ[] = new yjBase[100]; //暂时初始化100个试试
    for (j = 0; j < 5; j++) {
      //System.out.println("----------------------------------------");
      switch (j) {
        case 0:
          tmpYJ = inRec;
          break;
        case 1:
          tmpYJ = inLine;
          break;
        case 2:
          tmpYJ = inCircle;
          break;
        case 3:
          tmpYJ = inStr;
          break;
        case 4:
          tmpYJ = inArc;
          break;
      }
      if (tmpYJ == null) {
        //System.out.println("j:" + j + " tmpYJ=null");
      }
      //System.out.println("0 tmiX:" + tmiX + "; tmiY:" + tmiY);
      //System.out.println("0 tmaX:" + tmaX + "; tmaY:" + tmaY);
      if (tmpYJ != null) { //如果该构件的为空,则跳过
        if (tmiX == -1 || tmiX > tmpYJ[0].minX) {
          //System.out.println("--- tmiX:" + tmiX + "; tmpYJ[0].minX:" +
          //                   tmpYJ[0].minX + "  ---");
          tmiX = tmpYJ[0].minX;
        }
        if (tmiY == -1 || tmiY > tmpYJ[0].minY) {
          tmiY = tmpYJ[0].minY;
        }
        if (tmaX == -1 || tmaX < tmpYJ[0].maxX) {
          tmaX = tmpYJ[0].maxX;
        }
        if (tmaY == -1 || tmaY < tmpYJ[0].maxY) {
          tmaY = tmpYJ[0].maxY;
        }
        tmpLen = tmpYJ.length; // 求构件的数组大小,即该构件的数量
        //System.out.println("1 tmiX:" + tmiX + "; tmiY:" + tmiY);
        //System.out.println("1 tmaX:" + tmaX + "; tmaY:" + tmaY);
        for (i = 0; i < tmpLen; i++) { // 求得所有该种构件的综合坐标范围
          //System.out.println("J:" + j + "   i:" + i);
          if (tmiX > tmpYJ[i].minX) {
            tmiX = tmpYJ[i].minX;
          }
          if (tmiY > tmpYJ[i].minY) {
            tmiY = tmpYJ[i].minY;
          }
          if (tmaX < tmpYJ[i].maxX) {
            tmaX = tmpYJ[i].maxX;
          }
          if (tmaY < tmpYJ[i].maxY) {
            tmaY = tmpYJ[i].maxY;
          }
        }
        //System.out.println("2 tmiX:" + tmiX + "; tmiY:" + tmiY);
        //System.out.println("2 tmaX:" + tmaX + "; tmaY:" + tmaY);
      }
      //System.out.println("----------------------------------------");
    }
    minX = tmiX;
    minY = tmiY;
    maxX = tmaX;
    maxY = tmaY;
    /** 设定门电路的坐标 */
    x = minX;
    y = minY;
  }

}

/**
 * 定义构件和门电路的基类(抽象类)
 */
abstract class yjBase {
  int minX = 0, minY = 0;
  int maxX = 0, maxY = 0;
  int number = 0;
  String des;
  int id;
  public int x=0, y=0,fillFlag;
  abstract void yjpaint(Graphics2D g);

  abstract void yjpaint(Graphics2D g, Color c);

  abstract boolean yjMovie(int x, int y);

}

/**
 * 定义各种构件
 */
class yjRec
    extends yjBase {
  int width, height;

⌨️ 快捷键说明

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