package mydraw;import javax.swing.*;import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;class MyDraw extends Frame implements ActionListener,MouseListener,MouseMotionListener,ItemListener
{
JFrame f; //定义窗口
SetCanvas cans; //定义画布
JButton bt1[]; //定义工具栏按钮组
JButton bt2[]; //定义颜色栏按钮组
JButton bt3[]; //定义大小按钮组
JMenuItem mi1; //定义“新建”菜单栏
JMenuItem mi2; //定义“保存”菜单栏
JMenuItem mi3; //定义“退出”菜单栏
Point dians[]=new Point[10000]; //点数组
int tool=0; //当前工具选择
int color=0; //当前颜色选择
int ls=0; //当前大小选择
int dian=0; //
int startx,starty,endx,endy,height,width,chanx,chany; //记录开始结束坐标及图刑长宽
//Vector painInfo=null;
MyDraw() //重构
{
JFrame f=new JFrame("未命名-画图"); //创建窗口
f.setSize(700,600); //设置窗口大小
Container con=f.getContentPane(); //创建容器
con.setLayout(null); //设置容器布局管理器
//painInfo=new Vector();
bt1=new JButton[6]; //创建工具栏按钮
bt2=new JButton[8]; //创建颜色栏按钮
bt3=new JButton[8]; //创建大小按钮
//新建工具栏的标签
JLabel l1=new JLabel("【工具】",JLabel.CENTER);
JLabel l2=new JLabel("【颜色】",JLabel.CENTER);
JLabel l3=new JLabel("【大小】",JLabel.CENTER);
//添加标签到容器中
con.add(l1);
con.add(l2);
con.add(l3);
//设置标签位置
l1.setBounds(0,55,100,20);
l2.setBounds(115,55,220,20);
l3.setBounds(365,55,220,20);
//新建菜单栏
JMenuBar mb=new JMenuBar();
//新建菜单
JMenu menu1=new JMenu("文件");
JMenu menu2=new JMenu("帮助");
//新建菜单项
mi1=new JMenuItem("新建");
mi2=new JMenuItem("保存");
mi3=new JMenuItem("退出");
//为菜单项添加监听器
mi1.addActionListener(this);
mi2.addActionListener(this);
mi3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
//添加菜单项到菜单中
menu1.add(mi1);
menu1.add(mi2);
menu1.add(mi3);
mb.add(menu1);
mb.add(menu2);
f.setJMenuBar(mb);
//设置工具栏
JPanel panel1=new JPanel();
//新建工具栏
JToolBar toolBar1=new JToolBar("工具");
//垂直排列
toolBar1.setOrientation(SwingConstants.VERTICAL);
//设置为不可拖动
toolBar1.setFloatable(false);
//设置与边界的距离
toolBar1.setMargin(new Insets(10,2,2,2));
//设置布局方式
toolBar1.setLayout(new GridLayout(6,1,2,2));
bt1[0]=new JButton("消除");
bt1[1]=new JButton("擦除");
bt1[2]=new JButton("直线");
bt1[3]=new JButton("曲线");
bt1[4]=new JButton("矩形");
bt1[5]=new JButton("椭圆");
//依次为各个按钮添加事件监听器
for(int i=0;i<=5;i++)
{
toolBar1.add(bt1[i]);
bt1[i].addActionListener(this);
}
panel1.add(toolBar1);
//con.add(panel1,BorderLayout.WEST);
con.add(panel1);
panel1.setBounds(10, 65, 80, 220);
//设置颜色栏
JPanel panel2=new JPanel();
//新建一个JToolBar
JToolBar toolBar2=new JToolBar("颜色");
//设置为不可拖动
toolBar2.setFloatable(false);
//设置与边界的距离
toolBar2.setMargin(new Insets(2,2,2,2));
//设置布局方式
toolBar2.setLayout(new GridLayout(1,8,2,2));
bt2[0]=new JButton("红");
bt2[1]=new JButton("黄");
bt2[2]=new JButton("绿");
bt2[3]=new JButton("蓝");
bt2[4]=new JButton("黑");
bt2[5]=new JButton("白");
bt2[6]=new JButton("青");
bt2[7]=new JButton("紫");
//依次为各个按钮添加事件监听器
for(int i=0;i<=7;i++)
{
toolBar2.add(bt2[i]);
bt2[i].addActionListener(this);
}
panel2.add(toolBar2);
//con.add(panel2, BorderLayout.SOUTH);
//panel2.setBounds(100, 380, 220, 200);
con.add(panel2);
panel2.setBounds(115, 10, 220, 40);
//设置画线栏
JPanel panel3=new JPanel();
//新建一个JToolBar
JToolBar toolBar3=new JToolBar("画线粗细");
//设置为不可拖动
toolBar3.setFloatable(false);
//设置与边界的距离
toolBar3.setMargin(new Insets(2,2,2,2));
//设置布局方式
toolBar3.setLayout(new GridLayout(1,8,2,2));
bt3[0]=new JButton("1");
bt3[1]=new JButton("2");
bt3[2]=new JButton("3");
bt3[3]=new JButton("4");
bt3[4]=new JButton("5");
bt3[5]=new JButton("6");
bt3[6]=new JButton("7");
bt3[7]=new JButton("8");
//依次为各个按钮添加事件监听器
for(int i=0;i<=7;i++)
{
toolBar3.add(bt3[i]);
bt3[i].addActionListener(this);
}
panel3.add(toolBar3);
//con.add(panel3, BorderLayout.NORTH);
con.add(panel3);
panel3.setBounds(365, 10,220,40);
//创建画布
cans=new SetCanvas();
//设置画布背景颜色
cans.setBackground(Color.white);
//添加画布监听器
cans.addMouseListener(this);
cans.addMouseMotionListener(this);
//添加画布到容器中
con.add(cans);
cans.setBounds(100, 80,500,400);
f.setVisible(true);
}
//获取事件信息同时设置相应的工具、颜色、大小
public void actionPerformed(ActionEvent e)
{
JButton bu=(JButton)e.getSource();
{
for(int i=0;i<6;i++)
if(bu==bt1[i]) tool=i;
for(int j=0;j<8;j++)
if(bu==bt2[j]) color=j;
for(int g=0;g<8;g++)
if(bu==bt3[g]) ls=g;
}
}
//设置画布类
class SetCanvas extends Canvas
{
public void paint(Graphics g)
{
//新建图像
Graphics2D g2 = (Graphics2D)g;
//选择颜色
switch(color)
{
case 0: g2.setPaint(Color.red);break;
case 1: g2.setPaint(Color.yellow);break;
case 2: g2.setPaint(Color.green);break;
case 3: g2.setPaint(Color.blue);break;
case 4: g2.setPaint(Color.black);break;
case 5: g2.setPaint(Color.white);break;
case 6: g2.setPaint(Color.cyan);break;
case 7: g2.setPaint(Color.magenta);break;
}
//选择大小
switch(ls)
{
case 0: g2.setStroke(new BasicStroke(1));break;
case 1: g2.setStroke(new BasicStroke(3));break;
case 2: g2.setStroke(new BasicStroke(5));break;
case 3: g2.setStroke(new BasicStroke(7));break;
case 4: g2.setStroke(new BasicStroke(9));break;
case 5: g2.setStroke(new BasicStroke(11));break;
case 6: g2.setStroke(new BasicStroke(13));break;
case 7: g2.setStroke(new BasicStroke(15));break;
//case 8: g2.setStroke(new BasicStroke(19));break;
}
//选择工具
if(tool==0)
{
g2.clearRect(0,0,getSize().width,getSize().height);
}
if(tool==1)
{
g2.setPaint(Color.white);
for(int i=0;i<dian-1;i++)
g2.draw(new Line2D.Double(dians[i],dians[i+1]));
}
if(tool==2)
{
g2.draw(new Line2D.Double(startx,starty,endx,endy));
}
if(tool==3)
{
for(int i=0;i<dian-1;i++)
g2.draw(new Line2D.Double(dians[i],dians[i+1]));
}
if(tool==4)
{
g2.draw(new Rectangle2D.Double(startx,starty,width,height));
}
if(tool==5)
{
g2.draw(new Ellipse2D.Double(startx,starty,width,height));
}
}
public void update(Graphics g)
{
paint(g);
}
}
public void itemStateChanged(ItemEvent e)
{
}
public void mouseDragged(MouseEvent e)
{
if(tool==3||tool==1)
{
dians[dian] = new Point(e.getX(),e.getY());
dian++;
cans.repaint();
}
}
public void mouseMoved(MouseEvent e)
{
}
public void mouseClicked(MouseEvent e)
{
}
public void mousePressed(MouseEvent e)
{
if(tool!=3)
startx=e.getX();
starty=e.getY();
}
public void mouseReleased(MouseEvent e)
{
if(tool==3||tool==1)
dian=0;
else
{
endx=e.getX();
endy=e.getY();
if(tool!=2)
{
if((endx-startx)>=2)
{
width=endx-startx;
if((endy-starty)>=2)
height=endy-starty;
else
{
height=starty-endy;
starty=endy;
}
}
else
{
width=startx-endx;
if((endy-starty)>=2)
{
height=endy-starty;
startx=endx;
}
else
{
height=starty-endy;
startx=endx;
starty=endy;
}
}
}
cans.repaint();
}
}
public void mouseEntered(MouseEvent e)
{
}
public void mouseExited(MouseEvent e)
{
}
public static void main(String args[])
{
new MyDraw(); //创建对象
}
}
import java.awt.event.*;
import java.awt.geom.*;class MyDraw extends Frame implements ActionListener,MouseListener,MouseMotionListener,ItemListener
{
JFrame f; //定义窗口
SetCanvas cans; //定义画布
JButton bt1[]; //定义工具栏按钮组
JButton bt2[]; //定义颜色栏按钮组
JButton bt3[]; //定义大小按钮组
JMenuItem mi1; //定义“新建”菜单栏
JMenuItem mi2; //定义“保存”菜单栏
JMenuItem mi3; //定义“退出”菜单栏
Point dians[]=new Point[10000]; //点数组
int tool=0; //当前工具选择
int color=0; //当前颜色选择
int ls=0; //当前大小选择
int dian=0; //
int startx,starty,endx,endy,height,width,chanx,chany; //记录开始结束坐标及图刑长宽
//Vector painInfo=null;
MyDraw() //重构
{
JFrame f=new JFrame("未命名-画图"); //创建窗口
f.setSize(700,600); //设置窗口大小
Container con=f.getContentPane(); //创建容器
con.setLayout(null); //设置容器布局管理器
//painInfo=new Vector();
bt1=new JButton[6]; //创建工具栏按钮
bt2=new JButton[8]; //创建颜色栏按钮
bt3=new JButton[8]; //创建大小按钮
//新建工具栏的标签
JLabel l1=new JLabel("【工具】",JLabel.CENTER);
JLabel l2=new JLabel("【颜色】",JLabel.CENTER);
JLabel l3=new JLabel("【大小】",JLabel.CENTER);
//添加标签到容器中
con.add(l1);
con.add(l2);
con.add(l3);
//设置标签位置
l1.setBounds(0,55,100,20);
l2.setBounds(115,55,220,20);
l3.setBounds(365,55,220,20);
//新建菜单栏
JMenuBar mb=new JMenuBar();
//新建菜单
JMenu menu1=new JMenu("文件");
JMenu menu2=new JMenu("帮助");
//新建菜单项
mi1=new JMenuItem("新建");
mi2=new JMenuItem("保存");
mi3=new JMenuItem("退出");
//为菜单项添加监听器
mi1.addActionListener(this);
mi2.addActionListener(this);
mi3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
//添加菜单项到菜单中
menu1.add(mi1);
menu1.add(mi2);
menu1.add(mi3);
mb.add(menu1);
mb.add(menu2);
f.setJMenuBar(mb);
//设置工具栏
JPanel panel1=new JPanel();
//新建工具栏
JToolBar toolBar1=new JToolBar("工具");
//垂直排列
toolBar1.setOrientation(SwingConstants.VERTICAL);
//设置为不可拖动
toolBar1.setFloatable(false);
//设置与边界的距离
toolBar1.setMargin(new Insets(10,2,2,2));
//设置布局方式
toolBar1.setLayout(new GridLayout(6,1,2,2));
bt1[0]=new JButton("消除");
bt1[1]=new JButton("擦除");
bt1[2]=new JButton("直线");
bt1[3]=new JButton("曲线");
bt1[4]=new JButton("矩形");
bt1[5]=new JButton("椭圆");
//依次为各个按钮添加事件监听器
for(int i=0;i<=5;i++)
{
toolBar1.add(bt1[i]);
bt1[i].addActionListener(this);
}
panel1.add(toolBar1);
//con.add(panel1,BorderLayout.WEST);
con.add(panel1);
panel1.setBounds(10, 65, 80, 220);
//设置颜色栏
JPanel panel2=new JPanel();
//新建一个JToolBar
JToolBar toolBar2=new JToolBar("颜色");
//设置为不可拖动
toolBar2.setFloatable(false);
//设置与边界的距离
toolBar2.setMargin(new Insets(2,2,2,2));
//设置布局方式
toolBar2.setLayout(new GridLayout(1,8,2,2));
bt2[0]=new JButton("红");
bt2[1]=new JButton("黄");
bt2[2]=new JButton("绿");
bt2[3]=new JButton("蓝");
bt2[4]=new JButton("黑");
bt2[5]=new JButton("白");
bt2[6]=new JButton("青");
bt2[7]=new JButton("紫");
//依次为各个按钮添加事件监听器
for(int i=0;i<=7;i++)
{
toolBar2.add(bt2[i]);
bt2[i].addActionListener(this);
}
panel2.add(toolBar2);
//con.add(panel2, BorderLayout.SOUTH);
//panel2.setBounds(100, 380, 220, 200);
con.add(panel2);
panel2.setBounds(115, 10, 220, 40);
//设置画线栏
JPanel panel3=new JPanel();
//新建一个JToolBar
JToolBar toolBar3=new JToolBar("画线粗细");
//设置为不可拖动
toolBar3.setFloatable(false);
//设置与边界的距离
toolBar3.setMargin(new Insets(2,2,2,2));
//设置布局方式
toolBar3.setLayout(new GridLayout(1,8,2,2));
bt3[0]=new JButton("1");
bt3[1]=new JButton("2");
bt3[2]=new JButton("3");
bt3[3]=new JButton("4");
bt3[4]=new JButton("5");
bt3[5]=new JButton("6");
bt3[6]=new JButton("7");
bt3[7]=new JButton("8");
//依次为各个按钮添加事件监听器
for(int i=0;i<=7;i++)
{
toolBar3.add(bt3[i]);
bt3[i].addActionListener(this);
}
panel3.add(toolBar3);
//con.add(panel3, BorderLayout.NORTH);
con.add(panel3);
panel3.setBounds(365, 10,220,40);
//创建画布
cans=new SetCanvas();
//设置画布背景颜色
cans.setBackground(Color.white);
//添加画布监听器
cans.addMouseListener(this);
cans.addMouseMotionListener(this);
//添加画布到容器中
con.add(cans);
cans.setBounds(100, 80,500,400);
f.setVisible(true);
}
//获取事件信息同时设置相应的工具、颜色、大小
public void actionPerformed(ActionEvent e)
{
JButton bu=(JButton)e.getSource();
{
for(int i=0;i<6;i++)
if(bu==bt1[i]) tool=i;
for(int j=0;j<8;j++)
if(bu==bt2[j]) color=j;
for(int g=0;g<8;g++)
if(bu==bt3[g]) ls=g;
}
}
//设置画布类
class SetCanvas extends Canvas
{
public void paint(Graphics g)
{
//新建图像
Graphics2D g2 = (Graphics2D)g;
//选择颜色
switch(color)
{
case 0: g2.setPaint(Color.red);break;
case 1: g2.setPaint(Color.yellow);break;
case 2: g2.setPaint(Color.green);break;
case 3: g2.setPaint(Color.blue);break;
case 4: g2.setPaint(Color.black);break;
case 5: g2.setPaint(Color.white);break;
case 6: g2.setPaint(Color.cyan);break;
case 7: g2.setPaint(Color.magenta);break;
}
//选择大小
switch(ls)
{
case 0: g2.setStroke(new BasicStroke(1));break;
case 1: g2.setStroke(new BasicStroke(3));break;
case 2: g2.setStroke(new BasicStroke(5));break;
case 3: g2.setStroke(new BasicStroke(7));break;
case 4: g2.setStroke(new BasicStroke(9));break;
case 5: g2.setStroke(new BasicStroke(11));break;
case 6: g2.setStroke(new BasicStroke(13));break;
case 7: g2.setStroke(new BasicStroke(15));break;
//case 8: g2.setStroke(new BasicStroke(19));break;
}
//选择工具
if(tool==0)
{
g2.clearRect(0,0,getSize().width,getSize().height);
}
if(tool==1)
{
g2.setPaint(Color.white);
for(int i=0;i<dian-1;i++)
g2.draw(new Line2D.Double(dians[i],dians[i+1]));
}
if(tool==2)
{
g2.draw(new Line2D.Double(startx,starty,endx,endy));
}
if(tool==3)
{
for(int i=0;i<dian-1;i++)
g2.draw(new Line2D.Double(dians[i],dians[i+1]));
}
if(tool==4)
{
g2.draw(new Rectangle2D.Double(startx,starty,width,height));
}
if(tool==5)
{
g2.draw(new Ellipse2D.Double(startx,starty,width,height));
}
}
public void update(Graphics g)
{
paint(g);
}
}
public void itemStateChanged(ItemEvent e)
{
}
public void mouseDragged(MouseEvent e)
{
if(tool==3||tool==1)
{
dians[dian] = new Point(e.getX(),e.getY());
dian++;
cans.repaint();
}
}
public void mouseMoved(MouseEvent e)
{
}
public void mouseClicked(MouseEvent e)
{
}
public void mousePressed(MouseEvent e)
{
if(tool!=3)
startx=e.getX();
starty=e.getY();
}
public void mouseReleased(MouseEvent e)
{
if(tool==3||tool==1)
dian=0;
else
{
endx=e.getX();
endy=e.getY();
if(tool!=2)
{
if((endx-startx)>=2)
{
width=endx-startx;
if((endy-starty)>=2)
height=endy-starty;
else
{
height=starty-endy;
starty=endy;
}
}
else
{
width=startx-endx;
if((endy-starty)>=2)
{
height=endy-starty;
startx=endx;
}
else
{
height=starty-endy;
startx=endx;
starty=endy;
}
}
}
cans.repaint();
}
}
public void mouseEntered(MouseEvent e)
{
}
public void mouseExited(MouseEvent e)
{
}
public static void main(String args[])
{
new MyDraw(); //创建对象
}
}
再用ImageIO.write(RenderedImage im, String formatName, File output)
方法输出到图片
该方法使用样例:
BufferedIamge bi = new BufferedImage(width,height,BufferedImage.TYPE_4BYTE_ABGR);
Graphics2D g2d = (Graphics2D) bi.getGraphics();
g2d....你的画图过程,
ImageIO.write(bi, "png", new File("D:/1.jpg"));
换成Graphics2D g2 = (Graphics2D) bi.getGraphics();后就没办法画图了。
能说下具体应该怎么改吗?
你不要把Canvas中的Graphics2D g2 = (Graphics2D)g;
换成Graphics2D g2 = (Graphics2D) bi.getGraphics();
而是用两个不同的引用,
Graphics2D g2 = (Graphics2D)g;//Canvas中的
Graphics2D g2_b = (Graphics2D) bi.getGraphics();
g2_b....你的画图过程,
g2.drawImage(bi,0,0,null);//往Canvas上画
后面按你说的在Mydraw构造函数里加了个方法
public void draw()
{
Graphics2D g2 = (Graphics2D) bi.getGraphics();
g2...画图过程
}
然后在SetCanvas里改成
class SetCanvas extends Canvas
{
public void paint(Graphics g)
{
draw();
Graphics2D g3 = (Graphics2D)g;
g3.drawImage(bi,0,0,null);
}
public void update(Graphics g)
{
paint(g);
}
}
还是画不了东西哦。
还有我给菜单项“保存”加了
mi2.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
try
{
ImageIO.write(bi, "png", new File("D:/1.jpg"));
} catch (IOException e1)
{
e1.printStackTrace();
}
}
});选中菜单项之后还是没反应哦。
请问是哪里出错了呢?
import java.io.File;
import java.io.IOException;import javax.swing.*;import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.awt.image.BufferedImage;class MyDraw extends JFrame implements ActionListener {
SetCanvas cans; // 定义画布
JButton bt1[]; // 定义工具栏按钮组
JButton bt2[]; // 定义颜色栏按钮组
JButton bt3[]; // 定义大小按钮组
JMenuItem mi1; // 定义“新建”菜单栏
JMenuItem mi2; // 定义“保存”菜单栏
JMenuItem mi3; // 定义“退出”菜单栏 Point dians[] = new Point[10000]; // 点数组
int tool = 0; // 当前工具选择
int color = 0; // 当前颜色选择
int ls = 0; // 当前大小选择
int dian = 0; //
int startx, starty, endx, endy, height, width, chanx, chany; // 记录开始结束坐标及图刑长宽 public MyDraw() {
super("画图");
initialize();
}
private void initialize() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(700, 600); // 设置窗口大小
Container con = getContentPane(); // 创建容器
con.setLayout(null); // 设置容器布局管理器
bt1 = new JButton[6]; // 创建工具栏按钮
bt2 = new JButton[8]; // 创建颜色栏按钮
bt3 = new JButton[8]; // 创建大小按钮 // 新建工具栏的标签
JLabel l1 = new JLabel("【工具】", JLabel.CENTER);
JLabel l2 = new JLabel("【颜色】", JLabel.CENTER);
JLabel l3 = new JLabel("【大小】", JLabel.CENTER);
// 添加标签到容器中
con.add(l1);
con.add(l2);
con.add(l3);
// 设置标签位置
l1.setBounds(0, 55, 100, 20);
l2.setBounds(115, 55, 220, 20);
l3.setBounds(365, 55, 220, 20); // 新建菜单栏
JMenuBar mb = new JMenuBar();
// 新建菜单
JMenu menu1 = new JMenu("文件");
JMenu menu2 = new JMenu("帮助");
// 新建菜单项
mi1 = new JMenuItem("新建");
mi2 = new JMenuItem("保存");
mi3 = new JMenuItem("退出"); // 为菜单项添加监听器
mi1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
cans.createNewBuff();
}
});
mi2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
cans.save();
}
});
mi3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
// 添加菜单项到菜单中
menu1.add(mi1);
menu1.add(mi2);
menu1.add(mi3);
mb.add(menu1);
mb.add(menu2);
setJMenuBar(mb); // 设置工具栏
JPanel panel1 = new JPanel();
// 新建工具栏
JToolBar toolBar1 = new JToolBar("工具");
// 垂直排列
toolBar1.setOrientation(SwingConstants.VERTICAL);
// 设置为不可拖动
toolBar1.setFloatable(false);
// 设置与边界的距离
toolBar1.setMargin(new Insets(10, 2, 2, 2));
// 设置布局方式
toolBar1.setLayout(new GridLayout(6, 1, 2, 2));
bt1[0] = new JButton("消除");
bt1[1] = new JButton("擦除");
bt1[2] = new JButton("直线");
bt1[3] = new JButton("曲线");
bt1[4] = new JButton("矩形");
bt1[5] = new JButton("椭圆");
// 依次为各个按钮添加事件监听器
for (int i = 0; i <= 5; i++) {
toolBar1.add(bt1[i]);
bt1[i].addActionListener(this);
}
panel1.add(toolBar1);
con.add(panel1);
panel1.setBounds(10, 65, 80, 220); // 设置颜色栏
JPanel panel2 = new JPanel();
// 新建一个JToolBar
JToolBar toolBar2 = new JToolBar("颜色");
// 设置为不可拖动
toolBar2.setFloatable(false);
// 设置与边界的距离
toolBar2.setMargin(new Insets(2, 2, 2, 2));
// 设置布局方式
toolBar2.setLayout(new GridLayout(1, 8, 2, 2));
bt2[0] = new JButton("红");
bt2[1] = new JButton("黄");
bt2[2] = new JButton("绿");
bt2[3] = new JButton("蓝");
bt2[4] = new JButton("黑");
bt2[5] = new JButton("白");
bt2[6] = new JButton("青");
bt2[7] = new JButton("紫");
// 依次为各个按钮添加事件监听器
for (int i = 0; i <= 7; i++) {
toolBar2.add(bt2[i]);
bt2[i].addActionListener(this);
}
panel2.add(toolBar2);
con.add(panel2);
panel2.setBounds(115, 10, 220, 40); // 设置画线栏
JPanel panel3 = new JPanel();
// 新建一个JToolBar
JToolBar toolBar3 = new JToolBar("画线粗细");
// 设置为不可拖动
toolBar3.setFloatable(false);
// 设置与边界的距离
toolBar3.setMargin(new Insets(2, 2, 2, 2));
// 设置布局方式
toolBar3.setLayout(new GridLayout(1, 8, 2, 2));
bt3[0] = new JButton("1");
bt3[1] = new JButton("2");
bt3[2] = new JButton("3");
bt3[3] = new JButton("4");
bt3[4] = new JButton("5");
bt3[5] = new JButton("6");
bt3[6] = new JButton("7");
bt3[7] = new JButton("8");
// 依次为各个按钮添加事件监听器
for (int i = 0; i <= 7; i++) {
toolBar3.add(bt3[i]);
bt3[i].addActionListener(this);
}
panel3.add(toolBar3);
con.add(panel3);
panel3.setBounds(365, 10, 220, 40); // 创建画布
cans = new SetCanvas();
// 设置画布背景颜色
cans.setBackground(Color.white);
// 添加画布监听器
// 添加画布到容器中
con.add(cans);
cans.setBounds(100, 80, 500, 400);
cans.createNewBuff();
setVisible(true);
} // 获取事件信息同时设置相应的工具、颜色、大小
public void actionPerformed(ActionEvent e) {
JButton bu = (JButton) e.getSource();
{
for (int i = 0; i < 6; i++) {
if (bu.equals(bt1[i])) {
tool = i;
}
}
for (int i = 0; i < 8; i++) {
if (bu.equals(bt2[i])) {
color = i;
}
}
for (int i = 0; i < 8; i++) {
if (bu.equals(bt3[i])) {
ls = i;
}
}
}
} // 设置画布类
class SetCanvas extends Canvas implements MouseListener, MouseMotionListener{
private BufferedImage buffImg;
private Graphics2D g2bi;
private boolean newImg;
SetCanvas() {
super();
initialize();
}
private void initialize() {
addMouseListener(this);
addMouseMotionListener(this);
}
public void createNewBuff() {
buffImg = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_4BYTE_ABGR);
g2bi = buffImg.createGraphics();
g2bi.setBackground(Color.WHITE);
newImg = true;
repaint();
}
public void paint(Graphics g) {
// 新建图像
Graphics2D g2 = (Graphics2D) g;
// 选择颜色
switch (color) {
case 0:
g2bi.setPaint(Color.red);
break;
case 1:
g2bi.setPaint(Color.yellow);
break;
case 2:
g2bi.setPaint(Color.green);
break;
case 3:
g2bi.setPaint(Color.blue);
break;
case 4:
g2bi.setPaint(Color.black);
break;
case 5:
g2bi.setPaint(Color.white);
break;
case 6:
g2bi.setPaint(Color.cyan);
break;
case 7:
g2bi.setPaint(Color.magenta);
break;
}
// 选择大小
switch (ls) {
case 0:
g2bi.setStroke(new BasicStroke(1));
break;
case 1:
g2bi.setStroke(new BasicStroke(3));
break;
case 2:
g2bi.setStroke(new BasicStroke(5));
break;
case 3:
g2bi.setStroke(new BasicStroke(7));
break;
case 4:
g2bi.setStroke(new BasicStroke(9));
break;
case 5:
g2bi.setStroke(new BasicStroke(11));
break;
case 6:
g2bi.setStroke(new BasicStroke(13));
break;
case 7:
g2bi.setStroke(new BasicStroke(15));
break;
// case 8: g2.setStroke(new BasicStroke(19));break;
} // 选择工具
if (tool == 0) {
g2bi.clearRect(0, 0, getSize().width, getSize().height);
}
if (tool == 1) {
g2bi.setPaint(Color.white);
for (int i = 0; i < dian - 1; i++)
g2bi.draw(new Line2D.Double(dians[i], dians[i + 1]));
}
if (tool == 2) {
g2bi.draw(new Line2D.Double(startx, starty, endx, endy));
}
if (tool == 3) {
for (int i = 0; i < dian - 1; i++)
g2bi.draw(new Line2D.Double(dians[i], dians[i + 1]));
}
if (tool == 4) {
g2bi.draw(new Rectangle2D.Double(startx, starty, width, height));
}
if (tool == 5) {
g2bi.draw(new Ellipse2D.Double(startx, starty, width, height));
}
if (newImg) {
g2.clearRect(0, 0, getWidth(), getHeight());
newImg = false;
}
g2.drawImage(buffImg, 0, 0, null);
} public void update(Graphics g) {
paint(g);
}
public void save() {
try {
ImageIO.write(buffImg, "png", new File("D:/1.jpg"));
} catch (IOException e) {
e.printStackTrace();
}
}
public void mouseDragged(MouseEvent e) {
if (tool == 3 || tool == 1) {
dians[dian] = new Point(e.getX(), e.getY());
dian++;
repaint();
}
} public void mouseMoved(MouseEvent e) { } public void mouseClicked(MouseEvent e) { } public void mousePressed(MouseEvent e) {
if (tool != 3) {
startx = e.getX();
starty = e.getY();
}
} public void mouseReleased(MouseEvent e) {
if (tool == 3 || tool == 1)
dian = 0;
else {
endx = e.getX();
endy = e.getY();
if (tool != 2) {
if ((endx - startx) >= 2) {
width = endx - startx;
if ((endy - starty) >= 2)
height = endy - starty;
else {
height = starty - endy;
starty = endy;
}
} else {
width = startx - endx;
if ((endy - starty) >= 2) {
height = endy - starty;
startx = endx;
} else {
height = starty - endy;
startx = endx;
starty = endy;
} }
}
repaint();
}
} public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { }
} public static void main(String args[]) {
new MyDraw(); // 创建对象
}
}