用java编写画板

                          用java编写画板是我学习java的第二个事例,写画板其中要表现的功能在后面的代码中并没有全部实现,只实现了铅笔、刷子、橡皮擦、画直线、画矩形这些功能,

其中有用到继承、接口、方法重载、传参等知识点,在代码中我会用注释解释:

1、创建工程,工程名可以随意设置

2、创建DrawBroad类,继承JFrame,并导包

import javax.swing.JFrame;

public class DrawBroad extends JFrame {
	
}
3、在包中创建Text类,并建立主函数

public class Text {
	public static void main(String[] args) {
		
	}
}
4、在Text类中的主函数建立DrawBroad对象以调用DrawBroad类中的方法

DrawBroad db = new DrawBroad();
5、在DrawBroad类中创建方法

public void iniFrame(){
		
}
6、在Text类中调用iniFrame方法

db.iniFrame();
7、在方法iniFrame方法中编写窗体属性,在后面的代码中都要写在iniFrame方法中,不然就在主函数中运行不起来

	//创建窗口标题
	this.setTitle("画板");
	//创建窗口大小
	this.setSize(600,500);
	//创建窗口默认关闭操作
	this.setDefaultCloseOperation(3);
	//创建窗口出现的相对位置(屏幕中央)
	this.setLocationRelativeTo(null);
	//设置窗口的可见性
	this.setVisible(true);
8、创建边框布局,将窗体划分为左中下三部分

//创建边框布局
	BorderLayout bl = new BorderLayout();
	this.setLayout(bl);
9、在三个部分上添加三个面板panelTool,panelDraw,panelColor,并设置三个面板属性,将三个面板添加到窗体上

		// 创建三个面板
		JPanel panelTool = new JPanel();
		JPanel panelDraw = new JPanel();
		JPanel panelColor = new JPanel();
		// 设置背景色
		panelTool.setBackground(Color.gray);
		panelDraw.setBackground(Color.white);
		panelColor.setBackground(Color.green);
		// 设置这三个面板的大小
		panelTool.setPreferredSize(new Dimension(50, 0));
		panelColor.setPreferredSize(new Dimension(0, 50));
		// 将三个面板添加到窗体上去
		this.add(panelTool, BorderLayout.WEST);
		this.add(panelColor, BorderLayout.SOUTH);
		this.add(panelDraw);
10、在panelTool中创建单选按钮,将图片放在按钮上

//创建图片对象,将图片放在按钮上
			ImageIcon mi = new ImageIcon("images/draw"+i+".jpg");
			ImageIcon mi1 = new ImageIcon("images/draw"+i+"-1.jpg");
			ImageIcon mi2 = new ImageIcon("images/draw"+i+"-2.jpg");
			ImageIcon mi3 = new ImageIcon("images/draw"+i+"-3.jpg");
			jrb.setIcon(mi);
			jrb.setSelectedIcon(mi3);
			jrb.setPressedIcon(mi2);
			jrb.setRolloverIcon(mi1);
//将按钮边框去掉
			jrb.setBorder(null);
11、将panelTool面板设置为流式布局,让单选按钮紧密连在一起,起到美化作用

	// 将panelTool设置为流式布局
		panelTool.setLayout(new FlowLayout(0, 0, 0));
12、将panelTool的背景色设置为按钮颜色,起到美化作用

// 将panelTool面板的背景色设置为按钮的颜色
		Color color = new Color(233, 234, 238);
		// 设置背景色
		panelTool.setBackground(color);
		panelDraw.setBackground(Color.white);
		panelColor.setBackground(color);

13、在panelColor中添加三个面板来建立颜色框

// 在panelColor面板上在次添加三个面板
		// 创建三个面板对象
		JPanel panelColorFrame = new JPanel();
		JPanel panelColorLeft = new JPanel();
		JPanel panelColorRight = new JPanel();
		// 设置面板背景
		panelColorFrame.setBackground(Color.blue);
		panelColorLeft.setBackground(Color.white);
		panelColorRight.setBackground(Color.orange);
		// 设置面板大小
		panelColorFrame.setPreferredSize(new Dimension(180, 30));
		panelColorLeft.setPreferredSize(new Dimension(30, 30));
		panelColorRight.setPreferredSize(new Dimension(150, 30));
		// 设置流式布局
		panelColor.setLayout(new FlowLayout(0, 5, 10));
		panelColorFrame.setLayout(new FlowLayout(0, 0, 0));
		panelColorLeft.setLayout(new FlowLayout(0, 0, 0));
		panelColorRight.setLayout(new FlowLayout(0, 0, 0));
		// 将三个面板添加到下方面板
		panelColor.add(panelColorFrame);
		panelColorFrame.add(panelColorLeft);
		panelColorFrame.add(panelColorRight);
14、在panelColorRight中添加按钮,并添加颜色

// 在panelColorRight上添加二十个按钮
		Color[] color1 = { Color.black, Color.blue, Color.cyan, Color.gray,
				Color.green, Color.black, Color.blue, Color.cyan, Color.gray,
				Color.green, Color.black, Color.blue, Color.cyan, Color.gray,
				Color.green, Color.black, Color.blue, Color.cyan, Color.gray,
				Color.green };
		for (int i = 0; i < 20; i++) {
			JButton button = new JButton();
			button.setPreferredSize(new Dimension(15, 15));
			button.setBackground(color1[i]);
			panelColorRight.add(button);
15、将颜色框设置为凹下,是在按钮里设置

BevelBorder bb = new BevelBorder(1, Color.white, Color.gray);
button.setBorder(bb);

16、将两个按钮添加到panelColorLeft面板上去,写在this.setVisible(true);之前

JButton b1 = new JButton();
		JButton b2 = new JButton();
		b1.setBackground(Color.black);
		b2.setBackground(Color.white);
		BevelBorder bb1 = new BevelBorder(0, Color.white, Color.gray);
		b1.setBorder(bb1);
		b2.setBorder(bb1);
		panelColorLeft.add(b2);
		panelColorLeft.add(b1);
17、创建DrawListener类,继承接口(implements)mouseListener,然后添加鼠标监听方法,这种方法为方法重写

public void mouseClicked(MouseEvent e) {
		// TODO Auto-generated method stub

	}

	public void mousePressed(MouseEvent e) {
		// TODO Auto-generated method stub

	}

	public void mouseReleased(MouseEvent e) {
		// TODO Auto-generated method stub

	}

	public void mouseEntered(MouseEvent e) {
		// TODO Auto-generated method stub

	}

	public void mouseExited(MouseEvent e) {
		// TODO Auto-generated method stub

	}
18、在画板上画笔,在DrawListener类中进行传参

g = this.getGraphics();
DrawListener dl = new DrawListener(g, bg);
this.addMouseListener(dl);

//是在DrawListener类中进行创建
public ButtonGroup bg;
	public Graphics gra;

	public DrawListener(Graphics g1, ButtonGroup bg1) {
		gra = g1;
		bg = bg1;
	}

19、在DrawListener类中进行计算

public void mousePressed(MouseEvent e) {
		// TODO Auto-generated method stub
		x1 = e.getX();
		y1 = e.getY();
		//获得按钮上的标签
		ButtonModel bm = bg.getSelection();
		command = bm.getActionCommand();
	}

	public void mouseReleased(MouseEvent e) {
		// TODO Auto-generated method stub
		x2 = e.getX();
		y2 = e.getY();
		if ("10".equals(command)) {
			gra.drawLine(x1, y1, x2, y2);
		}
20、获得颜色来改变画笔的颜色,需要创建一个ColorListener类

// 添加颜色监听对象
ColorListener cl = new ColorListener(this);

public class ColorListener implements ActionListener {
	public DrawBroad db;

	public ColorListener(DrawBroad db1) {
		db = db1;
	}

	public void actionPerformed(ActionEvent e) {
		Object obj = e.getSource();
		JButton button = (JButton) obj;
		Color color = button.getBackground();
		db.g.setColor(color);
	}

}
21、添加画笔,需要在DrawListener类中接口MouseMotionListener,在方法中计算公式

@Override
	public void mouseDragged(MouseEvent e) {
		// TODO Auto-generated method stub
		x2 = e.getX();
		y2 = e.getY();
		if ("6".equals(command)) {
			gra.drawLine(x1, y1, x2, y2);
			x1 = x2;
			y1 = y2;
		}
22、添加刷子,其中画笔类型父类强行转化为子类类型

	public Graphics2D gra;
	public DrawListener(Graphics g1, ButtonGroup bg1) {
		gra = (Graphics2D) g1;
		bg = bg1;
	else if ("7".equals(command)) {
			gra.setStroke(new BasicStroke(10));
			gra.drawLine(x1, y1, x2, y2);
			x1 = x2;
			y1 = y2;
			gra.setStroke(new BasicStroke(1));
		}
	
23、添加橡皮擦,其中要设置背景色为白色

else if ("2".equals(command)) {
			gra.setColor(Color.white);
			gra.setStroke(new BasicStroke(10));
			gra.drawRect(Math.min(x2, x1), Math.min(y2, y1), Math.abs(x2 - x1),
					Math.abs(y2 - y1));
			x1 = x2;
			y1 = y2;
			gra.setStroke(new BasicStroke(1));
		}
其余功能有些类似,总共实现了这几大功能大概打画板出来























  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 画板UI设计(总体布局) (1)创建窗体并设置相关属性; (2)给整个窗体添加一个中间容器用来覆盖整个窗体; (3)设置边框布局,因为整个画板大致为左边部分,中间部分,菜单栏三个部分,用边框布局比较合适; (4)给窗体添加左面板,中间面板; (5)给左面板添加按钮,并设置按钮图片和效果; (6)给左面板添加左子面板,用来存放颜色按钮; 2.画板功能设计 (1)给左画板中的按钮组中的每个按钮添加鼠标监听器; (2)点击不同按钮,绘制不同的图形; (3)给左子面板中的每个颜色按钮添加鼠标监听器; (4)根据下面板中选中的颜色按钮,来获取按钮的背景颜色,并将该颜色设置成画笔的颜色; (5)铅笔功能 1、铅笔是鼠标拖动时画的线,所需要实现鼠标移动监听器,我们采用一个类来实现多个接口; 2、添加新的鼠标监听器类; 3、在鼠标移动时间中实现画笔的逻辑(其实就是绘制直线,鼠标每移动一个像素,就会触发移动事件,通过移动事件获取鼠标的坐标,与上一次移动的坐标连线就可以了; (6)刷子功能 刷子其实就是加粗的画笔,画出来的直线更粗,这里需要用到Graphic2D画笔来设置画笔的粗细。 (7)橡皮擦功能 橡皮擦就是把画笔颜色设置成相同的背景颜色就可以了,拖动鼠标时进行擦除,所以在鼠标拖动事件中编写。 (8)喷桶功能 1、定位方法:鼠标拖动事件实现; 2、随机数生成:Random; 3、实现原理,在鼠标拖动附近绘制很多的原点; 3. 画板的保存和重绘的设计 (1)给我们的画板添加菜单条、菜单以及菜单项 (2)给每个菜单项添加监听器 (3)点击不同的菜单项实现相应的功能 (4)图形保存功能:利用对象输出流,将容器对象写入文件; (5)打开图形功能:利用对象输入流,将容器对象读入,然后将容器里面的图形对象在画板上绘制出来 (6)新建文件功能:新建文件,将画板上绘制的内容清空(清空之前可以确认是否需要进行保存)清屏(重绘)功能依次方法; (7)文件保存格式为BMP格式; (8)文字功能:读取文本框中的文本并打印到屏幕鼠标的相应的响应位置,传入输入的文字大小的参数,以此来改变文字的大小; 4.弹泡泡功能的设计 根据Java多线程来实现弹泡泡功能;泡泡的位置颜色随机出现,并且做到碰到边框会变色;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值