📄 zshape.java
字号:
/*
* Copyright 2002 EZCell , Inc. All rights reserved.
* Version 1.0.
* Author W.John
*/
package ezcell;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Shape;
import java.awt.geom.Line2D;
import java.awt.geom.Rectangle2D;
public interface ZShape extends Cloneable {
static final int VERTICAL = 1;
static final int HORIZONTAL = 2;
/**
* DOCUMENT ME!
*
* @param left
* @param top
* @param right
* @param bottom
*/
public void setBound(int left, int top, int right, int bottom);
/**
* DOCUMENT ME!
*
* @return
*/
public ZRect getBound();
/**
* DOCUMENT ME!
*
* @param modal
*/
public void setModal(ZSheetState modal);
/**
* DOCUMENT ME!
*
* @return
*/
boolean isAnimating();
/**
* DOCUMENT ME!
*
* @return
*/
int getID();
/**
* DOCUMENT ME!
*
* @return
*/
ZSheetState getModal();
/**
* DOCUMENT ME!
*
* @param g2
*/
void erase(Graphics2D g2);
/**
* DOCUMENT ME!
*
* @param p
*
* @return
*/
ZShape hit(Point p);
/**
* DOCUMENT ME!
*
* @param x
* @param y
*/
void moveTo(int x, int y);
/**
* DOCUMENT ME!
*
* @param g2
*/
void paint(Graphics2D g2);
/**
* DOCUMENT ME!
*/
void startAnimation();
/**
* DOCUMENT ME!
*/
void stopAnimation();
abstract class AbstractShape implements ZShape {
ZSheetState modal;
int id;
/**
* DOCUMENT ME!
*
* @return
*/
public boolean isAnimating() {
return false;
}
/**
* DOCUMENT ME!
*
* @param left
* @param top
* @param right
* @param bottom
*/
public void setBound(int left, int top, int right, int bottom) {
}
/**
* DOCUMENT ME!
*
* @return
*/
public ZRect getBound() {
return null;
}
/**
* DOCUMENT ME!
*
* @return
*/
public int getID() {
return id;
}
/**
* DOCUMENT ME!
*
* @param modal
*/
public void setModal(ZSheetState modal) {
this.modal = modal;
}
/**
* DOCUMENT ME!
*
* @return
*/
public ZSheetState getModal() {
return modal;
}
/**
* DOCUMENT ME!
*
* @param g2
*/
public void erase(Graphics2D g2) {
paint(g2);
}
/**
* DOCUMENT ME!
*
* @param p
*
* @return
*/
public ZShape hit(Point p) {
return null;
}
/**
* DOCUMENT ME!
*
* @param x
* @param y
*/
public void moveTo(int x, int y) {
}
/**
* DOCUMENT ME!
*
* @param g2
*/
public void paint(Graphics2D g2) {
}
/**
* DOCUMENT ME!
*/
public void startAnimation() {
}
/**
* DOCUMENT ME!
*/
public void stopAnimation() {
}
}
public class Row extends AbstractShape {
int top;
int bottom;
Row(int top, int bottom, int id) {
this.top = top;
this.bottom = bottom;
this.id = id;
}
/**
* DOCUMENT ME!
*
* @param p
*
* @return
*/
public ZShape hit(Point p) {
if ((p.y >= top) && (p.y <= bottom)) {
return this;
} else {
return null;
}
}
}
public class Cell extends AbstractShape {
ZRect rect;
int row;
int col;
Cell(ZRect rect, int row, int col) {
this.rect = rect;
this.row = row;
this.col = col;
this.id = ZSheetState.HIT_CELL;
}
/**
* DOCUMENT ME!
*
* @param p
*
* @return
*/
public ZShape hit(Point p) {
return this;
}
}
public class Col extends AbstractShape {
int left;
int right;
Col(int left, int right, int id) {
this.left = left;
this.right = right;
this.id = id;
}
/**
* DOCUMENT ME!
*
* @param p
*
* @return
*/
public ZShape hit(Point p) {
if ((p.x >= left) && (p.x <= right)) {
return this;
} else {
return null;
}
}
}
class Rectangle extends AbstractShape {
int left;
int top;
int right;
int bottom;
boolean animation;
ZPen pen;
Object object;
Rectangle(int left, int top, int right, int bottom, int id) {
this.left = left;
this.top = top;
this.right = right;
this.bottom = bottom;
this.id = id;
}
Rectangle(int id) {
this.id = id;
}
/**
* DOCUMENT ME!
*
* @param left
* @param top
* @param right
* @param bottom
*/
public void setBound(int left, int top, int right, int bottom) {
this.left = left;
this.top = top;
this.right = right;
this.bottom = bottom;
}
/**
* DOCUMENT ME!
*
* @return
*/
public ZRect getBound() {
return new ZRect(left, top, right, bottom);
}
/**
* DOCUMENT ME!
*
* @return
*/
public Object clone() {
try {
return super.clone();
} catch (CloneNotSupportedException ex) {
return null;
}
}
/**
* DOCUMENT ME!
*
* @param p
*
* @return
*/
public ZShape hit(Point p) {
if (getBound().contain(p.x, p.y)) {
return this;
}
return null;
}
/**
* DOCUMENT ME!
*
* @param p
*
* @return
*/
public ZShape hitBorder(Point p) {
ZRect rc = getBound();
if (rc.inflate(-2, -2).contain(p.x, p.y)) {
return null;
}
if (rc.inflate(4, 4).contain(p.x, p.y)) {
return this;
} else {
return null;
}
}
/**
* DOCUMENT ME!
*
* @param g2
*/
public void paint(Graphics2D g2) {
g2.transform(modal.getTransform());
Shape gc = g2.getClip();
try {
modal.clipClient(g2);
} catch (Exception ex) {
}
g2.setXORMode(Color.white);
pen.paint(g2);
Rectangle2D r = new Rectangle2D.Float(left, top, right - left, bottom - top);
g2.draw(r);
g2.setPaintMode();
g2.setClip(gc);
}
}
class HLine extends AbstractShape {
int orientation;
Point pos = new Point(-1, -1);
boolean animation;
ZPen pen;
HLine(int orientation, int pos, ZPen pen) {
this.modal = modal;
if (orientation == ZShape.VERTICAL) {
this.pos.x = pos;
} else {
this.pos.y = pos;
}
this.pen = pen;
}
/**
* DOCUMENT ME!
*
* @param x
* @param y
*/
public void moveTo(int x, int y) {
if (pos.y == -1) {
pos.x = x;
} else {
pos.y = y;
}
}
/**
* DOCUMENT ME!
*
* @param g2
*/
public void paint(Graphics2D g2) {
ZRect clip = modal.getClip();
Point tl = modal.dp2lp(clip.getTopLeft());
Point br = modal.dp2lp(clip.getBottomRight());
// erase old
Point p0;
// erase old
Point p1;
if (pos.y == -1) {
tl.x = pos.x;
br.x = pos.x;
} else {
tl.y = pos.y;
br.y = pos.y;
}
g2.transform(modal.getTransform());
g2.setXORMode(Color.white);
pen.paint(g2);
Line2D line = new Line2D.Float(tl.x, tl.y, br.x, br.y);
g2.draw(line);
g2.setPaintMode();
}
}
class SimpleHLine extends AbstractShape {
Point tl;
Point br;
ZPen pen;
SimpleHLine(int l, int t, int r, int b, ZPen pen) {
tl = new Point(l, t);
br = new Point(r, b);
this.pen = pen;
}
SimpleHLine(int l, int t, int r, int b, ZPen pen, int id) {
this(l, t, r, b, pen);
this.id = id;
}
/**
* DOCUMENT ME!
*
* @param p
*
* @return
*/
public ZShape hit(Point p) {
ZRect rect = new ZRect(tl.x, tl.y, br.x, br.y);
rect.grow(2, 2);
if (rect.contain(p.x, p.y)) {
return this;
} else {
return null;
}
}
/**
* DOCUMENT ME!
*
* @param x
* @param y
*/
public void moveTo(int x, int y) {
br.x += (x - tl.x);
br.y += (y - tl.y);
tl.x = x;
tl.y = y;
}
/**
* DOCUMENT ME!
*
* @param g2
*/
public void paint(Graphics2D g2) {
g2.setXORMode(Color.white);
pen.paint(g2);
Line2D line = new Line2D.Float(tl.x, tl.y, br.x, br.y);
g2.draw(line);
g2.setPaintMode();
}
/**
* DOCUMENT ME!
*
* @param g2
*/
public void paint2(Graphics2D g2) {
pen.paint(g2);
Line2D line = new Line2D.Float(tl.x, tl.y, br.x, br.y);
g2.draw(line);
}
/**
* DOCUMENT ME!
*
* @param pen
*/
void setPen(ZPen pen) {
this.pen = pen;
}
/**
* DOCUMENT ME!
*
* @return
*/
ZPen getPen() {
return pen;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -