📄 myrectangle.java
字号:
package project;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.io.Serializable;
import java.util.ArrayList;
public class MyRectangle implements Shape, Serializable
{
private static final long serialVersionUID = 1L;
//矩形起点x,同时也是矩形坐标的x
private int x;
//矩形起点y,同时也是矩形坐标的y
private int y;
//矩形终点x
private int drawEndX;
//矩形终点y
private int drawEndY;
//矩形宽度的绝对值
private int widthAbs;
//矩形高度的绝对值
private int heightAbs;
//矩形起点在移动前的位置的x
private int originalX;
//矩形起点在移动前的位置的y
private int originalY;
private Color borderColor;
private Color fillColor;
private boolean isSelected = false;
public MyRectangle()
{
this(0, 0, 100, 100);
}
//通过起点的x,y和终点的x,y来构造矩形
public MyRectangle(int x, int y, int drawEndX, int drawEndY)
{
this.x = x;
this.y = y;
this.drawEndX = drawEndX;
this.drawEndY = drawEndY;
widthAbs = Math.abs(this.x - this.drawEndX);
heightAbs = Math.abs(this.y - this.drawEndY);
}
//绘制方法
public void draw(Graphics g)
{
g.setColor(borderColor);
g.drawRect(x, y, widthAbs, heightAbs);
g.setColor(fillColor);
g.fillRect(x, y, widthAbs, heightAbs);
Graphics2D g2 = (Graphics2D)g;
if(isSelected)
{
highlight(g2);
}
}
//判断鼠标是否点击在图形内
public boolean isInShape(int mouseX, int mouseY)
{
if((mouseX >= x) && (mouseX <= x + widthAbs) && (mouseY >= y) && (mouseY <= y + heightAbs))
{
return true;
}
else
{
return false;
}
}
public void setX(int x)
{
this.x = x;
}
public int getX()
{
return x;
}
public void setY(int y)
{
this.y = y;
}
public int getY()
{
return y;
}
public int getOriginalX()
{
return originalX;
}
public void setOriginalX(int originalX)
{
this.originalX = originalX;
}
public int getOriginalY()
{
return originalY;
}
public void setOriginalY(int originalY)
{
this.originalY = originalY;
}
public Color getBorderColor()
{
return borderColor;
}
public void setBorderColor(Color color)
{
this.borderColor = color;
}
public boolean getIsSelected()
{
return isSelected;
}
public void setIsSelected(boolean isSelected)
{
this.isSelected = isSelected;
}
public ArrayList<Shape> getCompositeArrayList()
{
return null;
}
//图形移动
public void move(Point mouseOriginalPoint, Point mouseEndPoint)
{
setX(originalX + mouseEndPoint.x
- mouseOriginalPoint.x);
setY(originalY + mouseEndPoint.y
- mouseOriginalPoint.y);
}
//图形高亮
public void highlight(Graphics2D g2) {
g2.setColor(Color.GREEN);
g2.setStroke(new BasicStroke(3));
g2.drawRect(x, y, widthAbs, heightAbs);
g2.setStroke(new BasicStroke(1));
}
public void setFillColor(Color color) {
this.fillColor = color;
}
//判断图形的坐标(左上角)是否在鼠标选定的矩形内
public boolean isInMouseArea(Point mouseOriginalPoint, Point mouseEndPoint) {
int width = mouseOriginalPoint.x - mouseEndPoint.x;
int widthAbs = Math.abs(width);
int height = mouseOriginalPoint.y - mouseEndPoint.y;
int heightAbs = Math.abs(height);
SuitableStartPoint suitableStartPoint = new SuitableStartPoint();
Point p = suitableStartPoint.getSuitableStartPoint(mouseOriginalPoint, mouseEndPoint);
if((x >= p.x) && (x <= p.x + widthAbs) && (y >= p.y) && (y <= p.y + heightAbs))
{
return true;
}
else
{
return false;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -