📄 paintbrush.java
字号:
}
}
/**
* author 吴权达<br>
* version 1.0 07-6-16<br>
* author 吴权达<br>
* version 2.0 07-6-20<br>
* 保存文件方法<br>
*/
public void saveFile()
{
try
{
JFileChooser fileChooser=new JFileChooser();
fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
int result =fileChooser.showSaveDialog(this);
if(result==JFileChooser.CANCEL_OPTION)
return ;
File fileName=fileChooser.getSelectedFile();
String path=fileName.getPath();
BufferedImage outImage=new BufferedImage(drawArea.getWidth(),drawArea.getHeight(),BufferedImage.TYPE_INT_RGB);
g = outImage.getGraphics();
drawArea.paintComponent(g);
ImageIO.write(outImage,"jpg",new File(path));
}
catch(Exception e)
{
e.printStackTrace();
}
}
/**
* author 吴权达<br>
* version 1.0 07-6-16<br>
* author 吴权达<br>
* version 2.0 07-6-20<br>
* 新建文件方法<br>
*/
public void newFile(){
num=0;
toolFlag = 0;
color=Color.black;
stroke=1.0f;
length=0;
drawShape();
repaint(); //将有关值设置为初始状态,并且重画
}
/**
* author 宋飞<br>
* version 1.0 07-6-16<br>
* author 宋飞<br>
* version 2.0 07-6-20<br>
* 颜色选择方法,用于选择当前颜色<br>
*/
public void chooseColor(){
color = JColorChooser.showDialog(PaintBrush.this, "请选择颜色", color);
if(color==null)
color=Color.BLACK;
R = color.getRed();
G = color.getGreen();
B = color.getBlue();
shape[num].R = R;
shape[num].G = G;
shape[num].B = B;
}
/**
* author 吴权达<br>
* version 1.0 07-6-16<br>
* author 吴权达<br>
* version 2.0 07-6-20<br>
* 用于创建与当前工具标记相应的图形对象<br>
*/
public void drawShape(){
switch(toolFlag){
//读取当前工具标记值并作出响应动作,绘制相应图形对象
case 0 :
shape[num] = new Pencil();
break;
case 1:
shape[num] = new Brush();
break;
case 2:
shape[num] = new Line();
break;
case 3:
shape[num] = new Oval();
break;
case 4:
shape[num] = new FillOval();
break;
case 5:
shape[num] = new Rectangle();
break;
case 6:
shape[num] = new FillRectangle();
break;
case 7:
shape[num] = new RoundRect();
break;
case 8:
shape[num] = new FillRoundRect();
break;
case 9:
shape[num] = new PolyGon();
break;
case 10:
shape[num] = new Eraser();
break;
case 11:
shape[num] = new Text();
break;
case 12:
shape[num] = new Undo();
break;
}//end switch
//以下代码设置当前颜色,线形,橡皮大小等状态
shape[num].stroke = stroke;
shape[num].eraserStroke=eraserStroke;
shape[num].R = R;
shape[num].G = G;
shape[num].B = B;
}//end drawShape
/**
* @author 李佶,吴权达
* @version 1.0 07-6-20
* @see javax.swing.JPanel
* @see DrawPanel 功能:用于实现画图区域的各项绘图功能
*/
class DrawPanel extends JPanel
{
public DrawPanel()
{
setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));//设置鼠标的形状,为crosshair
setBackground(Color.WHITE);
addMouseListener(new MouseA());//加入以上的mouseListener
addMouseMotionListener(new MouseB());
}
public void paintComponent(Graphics g)//实现画图区域的图形绘制
{
super.paintComponent(g);
if(image!=null){g.drawImage(image, 0, 0, this);}
Graphics2D g2d = (Graphics2D)g;
int i = 0;
while (i <= num) {
draw(g2d, shape[i]);
i++;
}
if(toolFlag==9) //如果当前工具标记为多边形,调用相应方法绘制
g2d.drawPolyline(xpoint, ypoint, length);
}
/**
* @author 宋飞
* @version 1.0 07-6-19
* @version 2.0 07-6-20
* @see MouseA 功能:实现了画图区域中的鼠标事件,包括点击和松开鼠标
*/
class MouseA extends MouseAdapter{
public void mousePressed(MouseEvent event)
{
shape[num].x1 =shape[num].x2= event.getX();
shape[num].y1 =shape[num].y2 =event.getY();
if(toolFlag == 0||toolFlag == 1 || toolFlag == 10)
//当绘图按钮选择的是铅笔,画刷和橡皮时所对应的方法
{
shape[num].x1 = shape[num].x2 = event.getX();
shape[num].y1 = shape[num].y2 = event.getY();
num++;
drawShape();
}
if(toolFlag == 9)
{ //当绘图按钮选择的多边形时所对应的方法
xpoint[length] = event.getX();
ypoint[length] = event.getY();
length++;
polygon.addPoint(event.getX(), event.getY());
if (length != 1 && Math.abs(event.getX() - xpoint[0]) < 10
&& Math.abs(event.getY() - ypoint[0]) < 10) {
shape[num].polygon = polygon;
length = 0;
polygon = new java.awt.Polygon();
num++;
drawShape();
repaint();
}
}
if(toolFlag == 11)
{ //绘图按钮选择的是Text时所对应的方法
String input;
input = JOptionPane.showInputDialog("请输入要插入的文字: ");
shape[num].inS = input;
shape[num]. fon= font;
shape[num].sty = style;
num++;
drawShape();
drawArea.repaint();
}
}
public void mouseReleased(MouseEvent event)
{
if(toolFlag == 0 || toolFlag == 1 || toolFlag == 10){
//当前工具为铅笔画刷或橡皮是对应的方法
shape[num].x1 = event.getX();
shape[num].y1 = event.getY();
}
if(toolFlag==9)
{//当绘图按钮选择的多边形时所对应的方法
repaint();
return;
}
else
{
shape[num].x2 = event.getX();
shape[num].y2 = event.getY();
}
undoStep[undoIndex++] = num;
repaint();
num++;
drawShape();
}
}//end MouseA
/**
* @author 宋飞
* @version 1.0 07-6-14
* @version 2.0 07-6-19
* @see MouseB 功能:实现鼠标事件功能
*/
class MouseB extends MouseMotionAdapter{
public void mouseDragged(MouseEvent e){
//当前工具为铅笔画刷或橡皮是对应的方法
if(toolFlag == 0 || toolFlag == 1 || toolFlag == 10)
{
shape[num-1].x1 = shape[num].x2 = shape[num].x1 = e.getX();
shape[num-1].y1 = shape[num].y2 = shape[num].y1 = e.getY();
num++;
drawShape();
shape[num].x2 = shape[num].x1 = e.getX();
shape[num].y2 = shape[num].y1 = e.getY();
}
if(toolFlag==9)
{
return;
}
else
{
shape[num].x2 = e.getX();
shape[num].y2 = e.getY();
}
repaint();
}
}//MouseB
public void draw(Graphics2D g2d, Shape a) {
a.draw(g2d); // 将画笔传入到各个子类中,用来完成各自的绘图
}
}
public static void main(String args[]){
PaintBrush application = new PaintBrush();
application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
/**
* @author 宋飞
* @version 1.0 07-6-16
* @see Pencil 功能:实现功能铅笔随意画
*/
private class Pencil extends Shape{
void draw(Graphics2D g2d){
g2d.setPaint(new Color(R,G,B));
g2d.setStroke(new BasicStroke(1.0f,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL));
g2d.drawLine(x1,y1,x2,y2);
}//draw
}//Pencil
/**
* @author 宋飞
* @version 1.0 07-6-16
* @see Brush 功能:实现功能画刷随意画
*/
class Brush extends Shape{
void draw(Graphics2D g2d){
g2d.setPaint(new Color(R,G,B));
g2d.setStroke(new BasicStroke(stroke,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL));
g2d.drawLine(x1,y1,x2,y2);
}//draw
}//Brush
/**
* @author 宋飞
* @version 1.0 07-6-17
* @see Line 功能:实现功能直线
*/
class Line extends Shape{
void draw(Graphics2D g2d){
g2d.setPaint(new Color(R,G,B));
g2d.setStroke(new BasicStroke(stroke,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL));
g2d.drawLine(x1,y1,x2,y2);
}//draw
}//Line
/**
* @author 宋飞
* @version 1.0 07-6-17
* @see Oval 功能:实现功能椭圆
*/
class Oval extends Shape{
void draw(Graphics2D g2d){
g2d.setPaint(new Color(R,G,B));
g2d.setStroke(new BasicStroke(stroke,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL));
g2d.drawOval(Math.min(x1,x2), Math.min(y1,y2), Math.abs(x1-x2), Math.abs(y1-y2));
}
}
/**
* @author 宋飞
* @version 1.0 07-6-18
* @see FillOval 功能:实现功能实心椭圆
*/
class FillOval extends Shape{
void draw(Graphics2D g2d)
{
g2d.setPaint(new Color(R,G,B));
g2d.setStroke(new BasicStroke(stroke));
g2d.fillOval(Math.min(x1,x2), Math.min(y1,y2), Math.abs(x1-x2), Math.abs(y1-y2));
}
}
/**
* @author 宋飞
* @version 1.0 07-6-18
* @see Rectangle 功能:实现功能矩形
*/
class Rectangle extends Shape{
void draw(Graphics2D g2d)
{
g2d.setPaint(new Color(R,G,B));
g2d.setStroke(new BasicStroke(stroke));
g2d.drawRect(Math.min(x1,x2), Math.min(y1,y2), Math.abs(x1-x2), Math.abs(y1-y2));
}
}
/**
* @author 宋飞
* @version 1.0 07-6-19
* @see FillRectangle 功能:实现功能实心椭圆
*/
class FillRectangle extends Shape{
void draw(Graphics2D g2d)
{
g2d.setPaint(new Color(R,G,B));
g2d.setStroke(new BasicStroke(stroke));
g2d.fillRect(Math.min(x1,x2), Math.min(y1,y2), Math.abs(x1-x2), Math.abs(y1-y2));
}
}
/**
* @author 宋飞
* @version 1.0 07-6-19
* @see RoundRect 功能:实现功能圆角矩形
*/
class RoundRect extends Shape{
void draw(Graphics2D g2d)
{
g2d.setPaint(new Color(R,G,B));
g2d.setStroke(new BasicStroke(stroke));
g2d.drawRoundRect(Math.min(x1,x2), Math.min(y1,y2), Math.abs(x1-x2),
Math.abs(y1-y2), 50, 35);
}
}
/**
* @author 宋飞
* @version 1.0 07-6-19
* @see FillRoundRect 功能:实现功能实心圆角矩形
*/
class FillRoundRect extends Shape{
void draw(Graphics2D g2d)
{
g2d.setPaint(new Color(R,G,B));
g2d.setStroke(new BasicStroke(stroke));
g2d.fillRoundRect(Math.min(x1,x2), Math.min(y1,y2), Math.abs(x1-x2),
Math.abs(y1-y2), 50, 35);
}
}
/**
* @author 宋飞
* @version 1.0 07-6-20
* @see PolyGon 功能:实现功能多边形
*/
class PolyGon extends Shape{
void draw(Graphics2D g2d)
{
g2d.setPaint(new Color(R,G,B));
g2d.setStroke(new BasicStroke(stroke));
g2d.drawPolygon(polygon);
}
}
/**
* @author 宋飞
* @version 1.0 07-6-20
* @see Eraser 功能:实现功能橡皮
*/
class Eraser extends Shape{
void draw(Graphics2D g2d)
{
g2d.setPaint(Color.WHITE);
g2d.setStroke(new BasicStroke(eraserStroke,BasicStroke.CAP_ROUND,BasicStroke.JOIN_BEVEL));
g2d.drawLine(x1,y1,x2,y2);
}
}
/**
* @author 宋飞
* @version 1.0 07-6-21
* @see Text 功能:实现功能文字添加
*/
class Text extends Shape{
void draw(Graphics2D g2d)
{
g2d.setPaint(new Color(R,G,B));
g2d.setFont(new Font(fon,sty , ((int)stroke * 18)));
if(inS != null)
g2d.drawString(inS,x1,y1);
}
}
/**
* @author 宋飞
* @version 1.0 07-6-21
* @see Undo 功能:实现功能撤销
*/
class Undo extends Shape{
void draw(Graphics2D g2d)
{
num = undoStep[undoIndex-1];
if(undoIndex>1)
undoIndex--;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -