Java制作画图板(阶段二)

来源:互联网 发布:铭兴茶业淘宝网 编辑:程序博客网 时间:2024/06/04 20:10

①  Panel是一个面板类,用于将窗体分为几个模块,把窗体上的组件分到各个模块中,

           JPanel draw_panel = new JPanel();//创建画图面板

           //添加面板到窗口

frame.add(draw_panel);

 

②    写画图板的画笔和橡皮时需要按住拖动鼠标来画出鼠标移动轨迹,需要用MouseMotionListener中的方法

//添加鼠标移动监听对象

          MouseMotionListener motion_listener =new MouseMotionListener()

          {

               public void mouseDragged(MouseEvent e) {//鼠标拖拽时触发事件

               }

               public void mouseMoved(MouseEvent e) {//鼠标移动时触发事件

               }

          };


③   创建同类按钮对象可用循环写,使代码更简洁。


④   调用按钮类的setActionCommand方法可以给按钮设置标记来区分同名的不同功能按钮。

//创建颜色数组

Color[]color = {Color.red,Color.pink,Color.orange,Color.yellow,Color.green,Color.blue,

                newColor(100,100,200),Color.black,Color.gray,Color.white};

for(inti=0;i<10;i++)

          {             

JButton jbt_color = new JButton();//创建按钮

               jbt_color.setBackground(color[i]);//设置按钮颜色

               jbt_color.setPreferredSize(new Dimension(26,26));//设置按钮大小

               jbt_color.setActionCommand("颜色"+i);//每个按钮设置不同的指令信息

               color_panel.add(jbt_color);//添加颜色按钮到颜色面板

               jbt_color.addActionListener(color_listener);//给颜色按钮添加监听对象

       }   


⑤   在颜色按钮的动作监听事件中, 创建一个按钮对象保存点击的按钮,用按钮类的getBackground方法获取给按钮的背景颜色,从而把颜色按钮的颜色传给画笔。

JButton jbt = (JButton)e.getSource();//创建一个按钮对象来保存点击的按钮

g.setColor(jbt.getBackground());//获得按钮的背景颜色并用来改变画笔颜色


⑥ 画笔的实现方法,通过在鼠标拖动过程中不断画相邻两点的线段构成自定义的线条。

(刷子和橡皮的实现方法相似。)

publicvoid mouseDragged(MouseEvent e) {//鼠标拖拽时的方法

                  x2 = e.getX();

                  y2 = e.getY();

                  if(cmd.equals("按钮7"))//当点击的按钮为画笔

                  {

                      //逐点画线

                      g.drawLine(x1,y1,x2,y2);

                      x1=x2;

                      y1=y2;

                  }

}


代码只完成 画笔、橡皮、画线段、椭圆、矩形、圆角矩形、选色功能


package com.huaxin.Draw;import javax.swing.*;//引用窗体类包import java.awt.*;//引用流式布局和监听器的包import java.awt.event.*;//引用事件类的包//定义画板类class Draw{Graphics g = null;//定义画笔String cmd ="按钮11";//创建图形标记String cmd2 ="黑色";//创建颜色按钮标记 int x1,x2,y1,y2,x3,y3;//创建点位坐标//主函数public static void main(String[] args){//创建画板对象Draw draw = new Draw();//创建画板对象draw.showUI();//调用展示界面的方法}public void showUI(){JFrame frame = new JFrame("画板");//创建窗体frame.setSize(500,500);//设置窗体大小frame.setLocation(300,100);//设置窗体位置FlowLayout layout = new FlowLayout();//创建线性布局对象frame.setLayout(layout);//设置窗体为线性布局JPanel draw_panel = new JPanel();//创建画图面板JPanel color_panel = new JPanel();//创建颜色选择面板JPanel shape_panel = new JPanel();//创建形状选择面板//添加面板到窗口frame.add(shape_panel);frame.add(draw_panel);frame.add(color_panel);//设置面板颜色shape_panel.setBackground(Color.blue);draw_panel.setBackground(Color.WHITE);color_panel.setBackground(Color.green);//设置面板大小shape_panel.setPreferredSize(new Dimension(80,370));draw_panel.setPreferredSize(new Dimension(370,370));color_panel.setPreferredSize(new Dimension(470,50));//创建颜色数组Color[] color = {Color.red,Color.pink,Color.orange,Color.yellow,Color.green,Color.blue,new Color(100,100,200),Color.black,Color.gray,Color.white};//创建按钮动作监听对象ActionListener action_listener = new ActionListener(){public void actionPerformed(ActionEvent e){cmd = e.getActionCommand();//获取按钮上的指令System.out.println(cmd);}};//颜色按钮动作监听对象ActionListener color_listener = new ActionListener(){public void actionPerformed(ActionEvent e){cmd2 = e.getActionCommand();//获取按钮上的指令System.out.println(cmd2);//判断点击颜色按钮的信息,将画笔设置为相应颜色if(!(cmd2.equals("更多"))){JButton jbt = (JButton)e.getSource();//创建一个按钮对象来保存点击的按钮g.setColor(jbt.getBackground());//获得按钮的背景颜色 并用来改变画笔颜色 }if(cmd2.equals("更多")){Color DIYcolor = JColorChooser.showDialog(null, "更多颜色", Color.black);g.setColor(DIYcolor);}}};//创建形状按钮for(int i=1;i<=16;i++){JButton jbt_shape = new JButton();//创建按钮ImageIcon icon = new ImageIcon("image//"+i+"-1.png");//创建图标对象jbt_shape.setIcon(icon);//设置按钮图标jbt_shape.setPreferredSize(new Dimension(26,26));//设置按钮大小jbt_shape.setActionCommand("按钮"+i);shape_panel.add(jbt_shape);//添加形状按钮到面板jbt_shape.addActionListener(action_listener);//给形状按钮添加监听对象}//创建颜色按钮对象for(int i=0;i<10;i++){JButton jbt_color = new JButton();//创建按钮jbt_color.setBackground(color[i]);//设置按钮颜色jbt_color.setPreferredSize(new Dimension(26,26));//设置按钮大小jbt_color.setActionCommand("颜色"+i);//每个按钮设置不同的指令信息color_panel.add(jbt_color);//添加颜色按钮到颜色面板jbt_color.addActionListener(color_listener);//给颜色按钮添加监听对象}//创建自定义颜色按钮对象JButton jbt_DIYcolor = new JButton("更多");color_panel.add(jbt_DIYcolor);//添加到面板jbt_DIYcolor.addActionListener(color_listener);//给颜色按钮添加监听对象//创建鼠标监听事件对象MouseListener mouse_listener = new MouseListener(){public void mouseEntered(MouseEvent e){//鼠标进入时}public void mouseExited(MouseEvent e){//鼠标移出时}public void mouseClicked(MouseEvent e){//鼠标点击时}public void mousePressed(MouseEvent e){//鼠标按住时x1=e.getX();//获取按住时的点位y1=e.getY();}public void mouseReleased(MouseEvent e){//鼠标释放时x2=e.getX();//获取释放时的点位y2=e.getY();if(cmd.equals("按钮11")){//判断所选按钮信息g.drawLine(x1,y1,x2,y2);//画直线}if(cmd.equals("按钮13")){g.drawRect((x1+x2)/2-Math.abs(x2-x1)/2,(y1+y2)/2-Math.abs(y2-y1)/2,Math.abs(x2-x1),Math.abs(y2-y1));//画矩形}if(cmd.equals("按钮15")){g.drawOval((x1+x2)/2-Math.abs(x2-x1)/2,(y1+y2)/2-Math.abs(y2-y1)/2,Math.abs(x2-x1),Math.abs(y2-y1));//画椭圆}if(cmd.equals("按钮16")){//画圆角矩形g.drawRoundRect((x1+x2)/2-Math.abs(x2-x1)/2,(y1+y2)/2-Math.abs(y2-y1)/2,Math.abs(x2-x1),Math.abs(y2-y1),Math.abs(x2-x1)/5,Math.abs(y2-y1)/5);}}};//添加鼠标移动监听对象MouseMotionListener motion_listener = new MouseMotionListener(){public void mouseDragged(MouseEvent e) {//鼠标拖拽时的方法x2 = e.getX();y2 = e.getY(); if(cmd.equals("按钮7"))//当点击的按钮为画笔{//逐点画线g.drawLine(x1,y1,x2,y2);x1=x2;y1=y2;}if(cmd.equals("按钮8"))//当点击的按钮为刷子{//逐点画线g.drawOval((x1+x2)/2-Math.abs(x2-x1)/2,(y1+y2)/2-Math.abs(y2-y1)/2,5,5);g.fillOval((x1+x2)/2-Math.abs(x2-x1)/2,(y1+y2)/2-Math.abs(y2-y1)/2,5,5);x1=x2;y1=y2;}if(cmd.equals("按钮3"))//当点击按钮为橡皮{//画白色圆形g.setColor(Color.white);g.drawOval((x1+x2)/2-Math.abs(x2-x1)/2,(y1+y2)/2-Math.abs(y2-y1)/2,30,30);g.fillOval((x1+x2)/2-Math.abs(x2-x1)/2,(y1+y2)/2-Math.abs(y2-y1)/2,30,30);x1=x2;y1=y2;}}public void mouseMoved(MouseEvent e) {//鼠标移动时实现方法}};//给画图面板添加鼠标监听对象和鼠标移动监听对象draw_panel.addMouseListener(mouse_listener);draw_panel.addMouseMotionListener(motion_listener);frame.setDefaultCloseOperation(3);//设置默认关闭操作frame.setVisible(true);//设置窗体可见g = draw_panel.getGraphics();//获取编辑面板的画笔!}};



0 0
原创粉丝点击