📄 drawpanel.java
字号:
import java.awt.*;
import java.util.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.geom.*;
import java.math.*;
import java.io.*;
//画板类
class drawPanel extends JPanel implements Serializable
{
private Graphics2D comp2D;
private int fromX;
private int fromY;
private int toX;
private int toY;
// 直线坐标数组
private int[] lineFromX=new int[1000];
private int[] lineFromY=new int[1000];
private int[] lineToX=new int[1000];
private int[] lineToY=new int[1000];
// 直线坐标数组计数
private int lineCount=0;
// 矩形坐标数组
private int[] rectFromX=new int[1000];
private int[] rectFromY=new int[1000];
private int[] rectToX=new int[1000];
private int[] rectToY=new int[1000];
// 矩形坐标数组计数
private int rectCount=0;
// 椭圆坐标数组
private float[] ellipseFromX=new float[1000];
private float[] ellipseFromY=new float[1000];
private float[] ellipseToX=new float[1000];
private float[] ellipseToY=new float[1000];
// 椭圆坐标数组计数
private int ellipseCount=0;
// 动态判断图形标志,数字布尔变量
// 1=line
// 2=rect
// 3=ellipse
private int numBoolean;
//构造方法
public drawPanel()
{
setBackground(Color.white);
setBorder(BorderFactory.createRaisedBevelBorder());
//设置观感是:windows
try
{
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
SwingUtilities.updateComponentTreeUI(drawPanel.this);
}
catch(Exception err) { err.printStackTrace(); }
}
//鼠标拖动事件,动态显示
public void dynamic(int from_X,int from_Y,int to_X,int to_Y)
{
fromX=from_X;
fromY=from_Y;
toX=to_X;
toY=to_Y;
}
//传递已经画完的图像
public void dynamicArray(int from_X,int from_Y,int to_X,int to_Y,int num_boolean )
{
numBoolean=num_boolean;
if(numBoolean==1)
{
lineFromX[lineCount]=from_X;
lineFromY[lineCount]=from_Y;
lineToX[lineCount]=to_X;
lineToY[lineCount]=to_Y;
lineCount++;
}
else
if(numBoolean==2)
{
rectFromX[rectCount]=from_X;
rectFromY[rectCount]=from_Y;
rectToX[rectCount]=to_X;
rectToY[rectCount]=to_Y;
rectCount++;
}
else
if(numBoolean==3)
{
ellipseFromX[ellipseCount]=from_X;
ellipseFromY[ellipseCount]=from_Y;
ellipseToX[ellipseCount]=to_X;
ellipseToY[ellipseCount]=to_Y;
ellipseCount++;
}
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D comp2D=(Graphics2D)g;
//鼠标拖动事件,动态画直线
if(numBoolean==1)comp2D.drawLine(fromX,fromY,toX,toY);
//显示已经画完的直线数组
for(int num=0;num<lineToX.length;num++)
comp2D.drawLine(lineFromX[num],lineFromY[num],lineToX[num],lineToY[num]);
//鼠标拖动事件,动态画矩形
if(numBoolean==2)
{
if((toX>fromX)&&(toY>fromY))
{
comp2D.drawRect(fromX,fromY,toX-fromX,toY-fromY);
}
else if((toX<fromX)&&(toY<fromY))
{
comp2D.drawRect(toX,toY,fromX-toX,fromY-toY);
}
else if((toX>fromX)&&(toY<fromY))
{
comp2D.drawRect(fromX,toY,toX-fromX,fromY-toY);
}
else if((toX<fromX)&&(toY>fromY))
{
comp2D.drawRect(toX,fromY,fromX-toX,toY-fromY);
}
}
//显示已经画完的矩形数组
for(int num=0;num<rectFromX.length;num++)
{
if((rectToX[num]>rectFromX[num])&&(rectToY[num]>rectFromY[num]))
{
comp2D.drawRect(rectFromX[num],rectFromY[num],rectToX[num]-rectFromX[num],rectToY[num]-rectFromY[num]);
}
else if((rectToX[num]<rectFromX[num])&&(rectToY[num]<rectFromY[num]))
{
comp2D.drawRect(rectToX[num],rectToY[num],rectFromX[num]-rectToX[num],rectFromY[num]-rectToY[num]);
}
else if((rectToX[num]>rectFromX[num])&&(rectToY[num]<rectFromY[num]))
{
comp2D.drawRect(rectFromX[num],rectToY[num],rectToX[num]-rectFromX[num],rectFromY[num]-rectToY[num]);
}
else if((rectToX[num]<rectFromX[num])&&(rectToY[num]>rectFromY[num]))
{
comp2D.drawRect(rectToX[num],rectFromY[num],rectFromX[num]-rectToX[num],rectToY[num]-rectFromY[num]);
}
}
//鼠标拖动事件,动态画椭圆
if(numBoolean==3)
{
if((toX>fromX)&&(toY>fromY))
{
Ellipse2D ellipse=new Ellipse2D.Float(fromX,fromY,toX-fromX,toY-fromY);
comp2D.draw(ellipse);
}
else if((toX<fromX)&&(toY<fromY))
{
Ellipse2D ellipse=new Ellipse2D.Float(toX,toY,fromX-toX,fromY-toY);
comp2D.draw(ellipse);
}
else if((toX>fromX)&&(toY<fromY))
{
Ellipse2D ellipse=new Ellipse2D.Float(fromX,toY,toX-fromX,fromY-toY);
comp2D.draw(ellipse);
}
else if((toX<fromX)&&(toY>fromY))
{
Ellipse2D ellipse=new Ellipse2D.Float(toX,fromY,fromX-toX,toY-fromY);
comp2D.draw(ellipse);
}
}
//显示已经画完的椭圆数组
for(int num=0;num<ellipseFromX.length;num++)
{
if((ellipseToX[num]>ellipseFromX[num])&&(ellipseToY[num]>ellipseFromY[num]))
{
Ellipse2D ellipse=new Ellipse2D.Float(ellipseFromX[num],ellipseFromY[num],
ellipseToX[num]-ellipseFromX[num],ellipseToY[num]-ellipseFromY[num]);
comp2D.draw(ellipse);
}
else if((ellipseToX[num]<ellipseFromX[num])&&(ellipseToY[num]<ellipseFromY[num]))
{
Ellipse2D ellipse=new Ellipse2D.Float(ellipseToX[num],ellipseToY[num],
ellipseFromX[num]-ellipseToX[num],ellipseFromY[num]-ellipseToY[num]);
comp2D.draw(ellipse);
}
else if((ellipseToX[num]>ellipseFromX[num])&&(ellipseToY[num]<ellipseFromY[num]))
{
Ellipse2D ellipse=new Ellipse2D.Float(ellipseFromX[num],ellipseToY[num],
ellipseToX[num]-ellipseFromX[num],ellipseFromY[num]-ellipseToY[num]);
comp2D.draw(ellipse);
}
else if((ellipseToX[num]<ellipseFromX[num])&&(ellipseToY[num]>ellipseFromY[num]))
{
Ellipse2D ellipse=new Ellipse2D.Float(ellipseToX[num],ellipseFromY[num],
ellipseFromX[num]-ellipseToX[num],ellipseToY[num]-ellipseFromY[num]);
comp2D.draw(ellipse);
}
}
}
//清空数组
public void clear()
{
for(int i=0;i<1000;i++)
{
lineFromX[i]=0;
lineFromY[i]=0;
lineToX[i]=0;
lineToY[i]=0;
rectFromX[i]=0;
rectFromY[i]=0;
rectToX[i]=0;
rectToY[i]=0;
ellipseFromX[i]=0;
ellipseFromY[i]=0;
ellipseToX[i]=0;
ellipseToY[i]=0;
fromX=0;
fromY=0;
toX=0;
toY=0;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -