1.主类
package s1221画图板重绘撤销;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.util.ArrayList;
import javax.swing.*;
public class Main1221
extends JFrame{
new ImageIcon("E:/Michael/javaImage/扫雷图片/2.jpg"),
//曲线
new ImageIcon("E:/Michael/javaImage/扫雷图片/2.jpg"),
//直线
new ImageIcon("E:/Michael/javaImage/扫雷图片/2.jpg"),
//矩形
new ImageIcon("E:/Michael/javaImage/扫雷图片/2.jpg"),
//椭圆
};
String st
[]={"曲线",
"直线",
"矩形",
"椭圆",
"橡皮",
"颜色笔",
"填色",
"放大镜",
"刷子",
"圆角矩形",
"涂鸦",
"文字",
"多边形",
"填充矩形",
"文字",
"多边形",
"填充矩形"};
static ArrayList<Shape> list = new ArrayList<Shape>();
Mymouselisten l1=new Mymouselisten(); //创建监听对象
public Main1221()
{
//设置窗体属性*********************************************
this.setDefaultCloseOperation(3);//设置关闭的方式
this.setSize(800, 600);//设置窗体的大小
this.setTitle("画板"); //设置窗体的标题
this.setResizable(true);//设置窗体不可改变大小
this.setLocationRelativeTo(null);//设置窗体出现在屏幕中间
//设置窗体属性*********************************************
//创建按钮**************************************
t1.addActionListener(l1);
m1.add(t1);
jbar.add(m1);
this.setJMenuBar(jbar);
//创建按钮***************************************
//左边的面板************************************
west.
setBackground(Color.
lightGray);
//左边的面板************************************
//下方的面板********************************************
south.
setPreferredSize(new Dimension(0,
100));
south.
setBackground(Color.
pink);
//下方的面板*********************************************
//绘画的面板**************************************************************
{
public void paint
(Graphics g
) //重写JPanel中的方法
{
super.paint(g);
list.forEach((shape)->shape.draw(g)); //lambda表达式
}
};
//绘画的面板**************************************************************
//中间的面板********************************************
center.
setBackground(Color.
GRAY);
center.add(drawpanel);
//中间的面板*********************************************
drawpanel.
setBackground(Color.
WHITE);
drawpanel.addMouseListener(l1); //给监听方法传递监听的对象
drawpanel.addMouseMotionListener(l1); //虽然l1实现了多个接口,但是面板要监听鼠标拖动事件,要分别添加方法
//**********************************窗体左边的选项栏***************************************//
for(int i=0;i<image.length;i++)
{
jb.setActionCommand(st[i]); //给这个图标添加action command 方便在事件中获取
jb.
setPreferredSize(new Dimension(image
[i
].
getIconWidth(),image
[i
].
getIconHeight()));
jb.setToolTipText(st[i]);
jb.addActionListener(l1);
west.add(jb);
}
//*****************************************************************************************//
//**********************************窗体下方颜色选择框***************************************//
{
jb1.setBackground(i);
jb1.addActionListener(l1);
south.add(jb1);
}
//*****************************************************************************************//
this.setVisible(true); //要先设置窗体可见,然后再传画笔
Graphics g
=drawpanel.
getGraphics(); //传递画笔 ,我一开始放在最后,结果不能显示!!!传画笔之前一定要先设置可见
l1.setGraphics(g,list,drawpanel);
}
public static void main
(String[] args
)
{ Main1221 k=new Main1221();}
}