📄 drawingpanel.java
字号:
//********************************************************************
// DrawingShapes.java Author: XieXing
//
// Panel allows user to create a shape.
//********************************************************************
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.event.*;
public class DrawingPanel extends JPanel {
// 存储图形
private ArrayList shapesArrayList = new ArrayList();
// 当前绘制图形
private Shapes currentShape;
// 初始化不选择
private int currentType = 0;
//默认未选择填充
private boolean fillShape = false;
// 初始化默认绘图颜色
private Color currentColor = new Color( 204, 204, 204 );
// 构造函数
public DrawingPanel()
{
addMouseListener(
new MouseAdapter() // 匿名内部类
{
// 监听鼠标按下按钮事件
public void mousePressed(MouseEvent event)
{
paintPanelMousePressed(event);
}
}
);
addMouseMotionListener(
new MouseMotionAdapter() // 匿名内部类
{
// 监听鼠标在绘图区拖拽事件
public void mouseDragged(MouseEvent event)
{
paintPanelMouseDragged(event);
}
}
);
}
// 改变当前绘图图形
public void setCurrentShapeType(int shape)
{
currentType = shape;
}
//设置填充图形
public void setfillShape (boolean fill)
{
fillShape = fill;
}
// 改变当前颜色
public void setCurrentColor(Color shapeColor)
{
currentColor = shapeColor;
}
// 创建新图形
public void paintPanelMousePressed(MouseEvent event)
{
if(fillShape == false)
{
switch(currentType)
{
case 0: // 创建一个Line对象并赋值给Shapes类型的变量
currentShape = new Line( event.getX(), event.getY(),
event.getX(), event.getY(), currentColor );
break;
case 1: // 创建一个Rectangle对象并赋值给Shapes类型的变量
currentShape = new Rectangle( event.getX(), event.getY(),
event.getX(), event.getY(), currentColor );
break;
case 2: // 创建一个Oval对象并赋值给Shapes类型的变量
currentShape = new Oval( event.getX(), event.getY(),
event.getX(), event.getY(), currentColor );
break;
case 3: // 创建一个Circle对象并赋值给Shapes类型的变量
currentShape = new Circle( event.getX(), event.getY(),
event.getX(), event.getY(), currentColor );
break;
}
}
else
{
switch(currentType)
{
case 0: // 创建一个Line对象并赋值给Shapes类型的变量
currentShape = new Line( event.getX(), event.getY(),
event.getX(), event.getY(), currentColor );
break;
case 1: // 创建一个Rectangle对象并赋值给Shapes类型的变量
currentShape = new FillRect( event.getX(), event.getY(),
event.getX(), event.getY(), currentColor );
break;
case 2: // 创建一个Oval对象并赋值给Shapes类型的变量
currentShape = new FillOval( event.getX(), event.getY(),
event.getX(), event.getY(), currentColor );
break;
case 3: // 创建一个Circle对象并赋值给Shapes类型的变量
currentShape = new FillCircle( event.getX(), event.getY(),
event.getX(), event.getY(), currentColor );
break;
}
}
shapesArrayList.add( currentShape );
}
// 响应鼠标拖拽,设置当前图形的坐标
public void paintPanelMouseDragged( MouseEvent event )
{
currentShape.setX2( event.getX() );
currentShape.setY2( event.getY() );
repaint();
}
// 利用迭代器绘制每一个图形
public void paintComponent( Graphics g )
{
super.paintComponent( g );
Shapes nextShape;
Iterator shapesIterator = shapesArrayList.iterator();
while ( shapesIterator.hasNext() )
{
nextShape = ( Shapes ) shapesIterator.next();
nextShape.draw( g );
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -