Java制作画图板(阶段二)

①  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(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);//给颜色按钮添加监听对象

       }   


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

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

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


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

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

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;

                  }

}


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


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();//获取编辑面板的画笔!	
		
	}
};



猜你喜欢

转载自blog.csdn.net/qq937654393/article/details/70177014