用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - java代码库

手绘板,多种颜色选择。我抄的《疯狂java讲义》的,包我乱导的,但代码能用。

2018-03-12 作者:五只脚的鱼举报

[java]代码库

import javax.swing.*;
import java.awt.image.*;
import java.awt.datatransfer.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;//.......................
import java.io.*;
import java.awt.dnd.*;//...................
import javax.imageio.*;//..............
import java.util.Iterator;
import java.lang.Iterable;
import java.util.List;
//JFrame(窗口)<JMenuBar(菜单条)<JMenu(菜单)<JMenuItem(菜单里的项目)
//JFrame(窗口)<JScrollPane(滚动条)<JTextArea(文件编辑面板)<JPopupMenu(右键菜单)
//JFrame(窗口)<JScrollPane(滚动条)<JLabel(标签)
//JFrame(窗口)<JPanel(板面)<JTextField(文件编辑条)
//JFrame(窗口)<JPanel(板面)<JButton(按钮)
//JFrame(窗口)<JPanel(板面)<JRadioButton(单选按钮,用ButtonGroup组合)
//JFrame(窗口)<JPanel(板面)<JCheckBox(复选框)
//JFrame(窗口)<JPanel(板面)<JComboBox(下拉选择框)
//JFrame(窗口)<Box(布局管理器)

public class HandDraw
{
	//画图区的宽度
	private final int AREA_WIDTH=500;
	//画图区的高度
	private final int AREA_HEIGHT=400;
	//下面的变量保存上一次鼠标拖动事件的鼠标坐标
	private int preX = -1 ;
	private int preY = -1 ;
	//定义右键菜单用于设置画笔颜色
	JPopupMenu pop=new JPopupMenu();//右键菜单
	JMenuItem chooseColor = new JMenuItem("选择颜色");
	//定义 一个BufferedImage对象.......绘制位图.....................................................
	//图像是先画在BufferedImage上的,再加到DrawCanvas中------------------------
	BufferedImage image=new BufferedImage(AREA_WIDTH,AREA_HEIGHT,BufferedImage.TYPE_INT_RGB);
	//获取image对象的Graphics(Graphics翻译:制图法、制图学、图表算法)
	Graphics g=image.getGraphics();//
	//..........................................................................................
	private JFrame f = new JFrame("简单手绘板");
	private DrawCanvas drawArea=new DrawCanvas();//画布
	//用于保存画笔颜色,默认是红色
	private Color foreColor = new Color(255,0,0);
	//.............................................................................
	public void init(){
	
		chooseColor.addActionListener(new ActionListener(){

			public void actionPerformed(ActionEvent ae){
				//弹出一个非模式的颜色选择 ---对话框JDialog---
				//并可以分别为“确定”按钮,“取消”按钮指定事件监听器----------------------------
				      //颜色选择器,系统全准备好了(按钮都准备了)----------------------------
				final JColorChooser colorPane = new JColorChooser(foreColor);
				//《疯狂java讲义》P483 createDialog()方法--------------------------------------
				JDialog jd = JColorChooser.createDialog(f,"选择画笔颜色",false,colorPane,
					                                                    //非模式//颜色选择器
					//“确定”按钮的位置,为它设置事件监听器------------------------------------
					new ActionListener(){                              
					public void actionPerformed(ActionEvent ae){
						foreColor = colorPane.getColor();
					}
				},null);//“取消”按钮的位置-----------------------------------------------------
				jd.setVisible(true);
			}
		});
		//将菜单项组合成右键菜单---------------------------------------------------------------
		pop.add(chooseColor);
		//将右键菜单添加到drawArea对象中----相当于鼠标右键监听器------------------------------
		//--------------卡在这里半天原来是DrawCanvas的继承关系变了DrawCanvas extends JPanel---------------
		//---------------------------之前是继承Canvas,现在是JPanel-----------------------------
		drawArea.setComponentPopupMenu(pop);
		//drawArea.add(pop);
		//将image对象背景色填充成白色
		g.fillRect(0,0,AREA_WIDTH,AREA_HEIGHT);
		//这是画布的大小。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
		drawArea.setPreferredSize(new Dimension(AREA_WIDTH,AREA_HEIGHT));

		//监听鼠标移动 (Motion左键) 动作。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
		drawArea.addMouseMotionListener(new MouseMotionAdapter(){

			//实现 按下鼠标并拖动的 事件处理器。。。。。。。。。。。。。。
			public void mouseDragged(MouseEvent e){

				//如果preX和preY大于0
				if(preX > 0 && preY > 0){
					//设置当前颜色
					g.setColor(foreColor);
					//绘制 从上一次鼠标拖动事件点到本次鼠标拖动事件点的 线段
					g.drawLine(preX,preY,e.getX(),e.getY());
				}
				//将当前鼠标事件点的X,Y坐标保存起来
				preX = e.getX();
				preY = e.getY();
				//重绘darwArea对象
				drawArea.repaint();
			}
		});
		
		//监听鼠标事件(没有Motion)(右键)。。。。。。。。。上面是监听鼠标移动。。。。。。。。。。。。
		drawArea.addMouseListener(new MouseAdapter(){
			//实现 鼠标键松开 的事件处理器。。。。。。。。。。。。。。。。。。。。。。。。
			public void mouseReleased(MouseEvent e){
				
				//松开鼠标键时,把上一次鼠标拖动事件点的X,Y坐标设为-1
				preX = -1;
				preY = -1;
			}
		});
		//此代码在swing中相当于鼠标右键监听器----------------------------------------------------
		//new JTextArea().setComponentPopupMenu(pop);
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.add(drawArea);
		f.pack();
		f.setVisible(true);
	}
	//主程序入口
	public static void main(String[] args){
		new HandDraw().init();
	}
	//内部类
	class DrawCanvas extends JPanel//------------------------------------------------
	{
		//重写JPanel的paint方法,实现绘画
		public void paint(Graphics g){
			//将image绘制到该组件上
			g.drawImage(image,0,0,null);
		}
	}
}

[代码运行效果截图]


手绘板,多种颜色选择。我抄的《疯狂java讲义》的,包我乱导的,但代码能用。


分享到:
更多

网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。