初识JAVA----画图板项目

1.项目介绍

画图板项目是我初学JAVA接触到的第一个项目,也是很重要的一步,让我对JAVA和面向对象的编程思想有了更深的认识,算是JAVA的入门。其中涉及到的参数的传递,GUI的设计以及类的继承等知识,对于很多初学者来说可能有些难度,现在我将这个小项目的编程思路整理出来供初学者参考,老鸟勿喷,直接忽略就可以了。这个项目实现的功能很简单,能够选取图形的形状和画笔的颜色,在绘图区域进行画图,阅读者可以自行添加更多更复杂的功能,比如更加复杂的形状,铅笔图形,保存图片等等。
初识JAVA----画图板项目_第1张图片
 2.项目设计

这个项目一共有三个类,一个主类,一个鼠标监听类,一个绘图动作监听类。主类的功能是绘制界面,包括按钮区和绘图区,然后给各区域加上监听器。鼠标监听类是用来监听鼠标按下的动作,鼠标在按钮去点击了什么,将它传递给绘图监听类,绘图监听类拿到各种颜色和形状的值之后,再监听到动作,也就是鼠标的点击释放,获取点击释放的坐标,在配合形状,颜色,,绘制相应颜色的图形。

(1)主类

 

package com_3;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

/**
 * 2015.9.13
 * @author Hanzhi Zhang
 */
public class jframe extends JFrame{
	private ButListener b;
	private ButListener c;
	
	public static void main(String[] args) {
		jframe jf = new jframe();//新建界面对象
		jf.initUI();//初始化
	}
	
/**
 * 初始化界面,绘制出按钮区,给按钮和绘图区域加上监听器
 */
	public void initUI(){
		this.setTitle("画图板");//名字
		this.setSize(600,600);//尺寸
		this.setDefaultCloseOperation(3);//关闭时自动退出	
		this.setLocationRelativeTo(null);//相对位置居中
		
		addWestPanel();//添加形状按钮区
		addColorPanel();//添加颜色按钮区	
		
		this.setVisible(true);//窗体可见
		
		Graphics g = this.getGraphics();//获取当前对象的画笔
		DrawListener l = new DrawListener(g,b,c);//根据获取到的形状,颜色,画笔构建动作监听器对象
		this.addMouseListener(l);//添加
		
	}

	
/**
 * 按钮区之形状选择区
 */
	public void addWestPanel(){
		JPanel westPanel = new JPanel();
		westPanel.setPreferredSize(new Dimension(80, 0));
		westPanel.setBackground(Color.lightGray);
		String[] str = {"直线","矩形","椭圆","铅笔"};
		b = new ButListener();
		for(int i=0;i<str.length;i++){
			JButton jb = new JButton(str[i]);
			jb.addActionListener(b);//给按钮对象添加动作监听器方法
			westPanel.add(jb);
		}
		this.add(westPanel,BorderLayout.WEST);
	}

	
/**
 * 按钮区之颜色选择区
 * 
 */
	public void addColorPanel(){
		JPanel colorPanel = new JPanel();
		colorPanel.setPreferredSize(new Dimension(0, 80));
		colorPanel.setBackground(Color.GRAY);
		Color[] color = {Color.BLACK,Color.BLUE,Color.RED,Color.GREEN,Color.CYAN,Color.YELLOW,Color.MAGENTA};
		c=new ButListener();
		for(int i=0;i<color.length;i++){
			JButton colorBut = new JButton();
			colorBut.setPreferredSize(new Dimension(30,30));
			colorBut.setBackground(color[i]);
			colorPanel.add(colorBut);
			colorBut.addActionListener(c);
		}
		this.add(colorPanel,BorderLayout.SOUTH);
	}
}

 (2)鼠标监听类

 

package com_3;

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;

public class ButListener implements ActionListener{
	private String s;
	private Color c;
	public String getS(){
		return s;//返回获得到的按钮上的文字
	}
	
	public Color getC(){
		return c;//获得按钮上的颜色值
	}
	
	public void actionPerformed(ActionEvent e) {
		s= e.getActionCommand();
		JButton j =(JButton)e.getSource();
		c=j.getBackground();
	}
}

 (3)动作监听类

package com_3;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

public class DrawListener implements MouseListener{
	private int x1,y1,x2,y2;//定义按下,释放时的点的坐标
	private String str;//用来接收按钮按下时获得的字符串
	private Color color;//用来接收按钮按下时获得的颜色值
	
	//用来接收按钮事件类的对象
	private Graphics g;//画笔对象
	private ButListener b;//对应于形状按钮区
	private ButListener c;//对应于颜色按钮区
	
/*
 * 构造方法,将jframe类的参数传递过来,对应于jframe类的
 * DrawListener l = new DrawListener(g,b,c);
 */
	public DrawListener(Graphics g,ButListener b,ButListener c){
		this.g = g;
		this.b = b;
		this.c=  c;
	}
	
	//鼠标按下
	public void mousePressed(MouseEvent e) {
		x1 = e.getX();
		y1 = e.getY();
		str = b.getS();
		color=c.getC();
		g.setColor(color);
	}

	//鼠标释放
	public void mouseReleased(MouseEvent e) {
		x2 = e.getX();
		y2 = e.getY();
		if(str.equals("直线")){
			g.drawLine(x1, y1, x2, y2);
		}else if(str.equals("矩形")){
			g.drawRect(Math.min(x1,x2),Math.min(y1,y2), Math.abs(x2-x1),Math.abs(y2-y1));
			}else if(str.equals("椭圆")){
				g.drawOval(Math.min(x1,x2),Math.min(y1,y2), Math.abs(x2-x1),Math.abs(y2-y1));		
			}else if(str.equals("铅笔")){
				
			}
		}		
	

	//鼠标进入
	public void mouseEntered(MouseEvent e) {
	}

	//鼠标退出
	public void mouseExited(MouseEvent e) {
	}
	
	//鼠标点击
	public void mouseClicked(MouseEvent e) {
	}
}

 

你可能感兴趣的:(初识JAVA----画图板项目)