📄 yuanjian.java
字号:
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 + -