Java---简单画图板的实现

利用Java自带的awt和swing工具包以及动作监视器、鼠标监视器可以实现简单的画图板的功能。今天,我们就以画图板为例,实现画出简单的直线、矩形、圆形、普通三角形、直角三角形、等腰三角形以及改变它们颜色的功能。
第一步,我们不妨先想想实现这样一个画图板界面上需要什么:选择图形的按钮和颜色选择器。
1.用JFrame建立轮廓;
2.设置布局器(这里用到了边框布局器和流式布局器);
3.设置按钮。
这样,一个简单的界面就做好了,源代码如下:

package 画图板;

import javax.swing.*;
import java.awt.*;


public class DrawPad {
public void initDrawPad(){
	JFrame jf=new JFrame();
	jf.setTitle("画图板");
	jf.setSize(1600,1000);
	jf.setDefaultCloseOperation(jf.EXIT_ON_CLOSE);//3
	jf.setLocationRelativeTo(null);//居中

	JLabel jlb=new JLabel();
	//边框布局器
	BorderLayout bdl=new BorderLayout();
	jf.setLayout(bdl);
	JPanel njp=new JPanel();
	JPanel cjp=new JPanel();
	njp.setBackground(Color.lightGray);
	njp.setPreferredSize(new Dimension(0,80));;
	FlowLayout fl = new FlowLayout();//实例化流式布局器
	njp.setLayout(fl);	//设置布局器
	jf.add(njp,BorderLayout.NORTH);
	jf.add(cjp,BorderLayout.CENTER);
	
	//设置空标签的尺寸
	Dimension nulldms=new Dimension(800,70);
	jlb.setPreferredSize(nulldms);
	
	
	Dimension btndms=new Dimension(100,50);
	//添加直线按钮
	JButton btnl=new JButton("直线");
	btnl.setPreferredSize(btndms);
	//添加圆按钮
	JButton btnr=new JButton("三角形");
	btnr.setPreferredSize(btndms);	
	
	//添加矩形按钮
	JButton btnc=new JButton("矩形");
	btnc.setPreferredSize(btndms);
	
	//添加圆形按钮
	JButton btny=new JButton("圆形");
	btny.setPreferredSize(btndms);
	
	//添加直角三角形按钮
	JButton btnrt=new JButton("直角三角形");
	btnrt.setPreferredSize(btndms);
	
	//添加等腰三角形按钮
	JButton btnet=new JButton("等腰三角形");
	btnet.setPreferredSize(btndms);
	
	//颜色按钮的大小
	Dimension cldms=new Dimension(20,20);
	//添加颜色按钮
	JButton clr=new JButton();
	clr.setBackground(Color.black);
	clr.setPreferredSize(cldms);
	
	njp.add(btnl);
	njp.add(btnc);
	njp.add(btnr);
	njp.add(btny);
	njp.add(btnrt);
	njp.add(btnet);
	njp.add(jlb);
	njp.add(clr);
	
	jf.setVisible(true);
	//实例化DrawPad对象
	DrawListener dl=new DrawListener();
	cjp.addMouseListener(dl);
	btnl.addActionListener(dl);
	btnr.addActionListener(dl);
	btnc.addActionListener(dl);
	btny.addActionListener(dl);
	btnrt.addActionListener(dl);
	btnet.addActionListener(dl);
	clr.addActionListener(dl);
	//取到画笔对象
	Graphics g=cjp.getGraphics();
	
	dl.g=g;
}

public static void main(String []args){
	DrawPad drawPad=new DrawPad();
	drawPad.initDrawPad();
}
}

第二步,给按钮添加功能,点击直线时就画直线,点击红色时颜色就转变为红色。
1.用动作监听器时时监视我们的“动作”。利用动作监听器,可以取到按钮中的字体颜色等,方面我们作出判断。用法如下:

public class DrawListener implements ActionListener{}

注意,监听器里面的抽象方法必须重写(即使你没用到)
在动作监听器当中,利用某些特定的函数可以实现字符串等的获取,可以参见下面的源代码。
2.用鼠标监听器可以时时监听我们鼠标的“动向”,鼠标监听器里面有四个方法,分别表示了鼠标点击、进入、释放、退出四个动作。在这四个方法中,可以取点,完成图形的构造。
3.下面,就是图形的制作。画直线需要两个点,三角形三个点,矩形两个对角点和长宽。
监听器部分的源代码如下:

package 画图板;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JButton;
import javax.swing.JColorChooser;

import com.sun.org.apache.xalan.internal.xsltc.compiler.sym;

import java.awt.*;


public class DrawListener implements MouseListener,ActionListener{
	int x1,y1,x2,y2,x3,y3,x4,y4,x5,y5;
	int i=1;
	Color cl;
	String btnstr="";
	Graphics g;

public void actionPerformed(ActionEvent e) {
	
	 btnstr = e.getActionCommand();//取到字符串
	 System.out.println(btnstr);
	
	   if ("".equals(btnstr)) {
		   //设置颜色
		JColorChooser jcc=new JColorChooser();
		cl=jcc.showDialog(null,"颜色选择器",null);
	
	    JButton button = (JButton) e.getSource();
	    button.setBackground(cl);
	    
	    g.setColor(cl);
	  }
	   
	 
}
    public void mouseClicked(MouseEvent e){
    	System.out.println("点击");
    	
	if(btnstr.equals("三角形")){
		if(i==1){
		x1=e.getX();
    	y1=e.getY();
    	System.out.println("x1="+x1);	
    	}
		if(i==2){
    		x2=e.getX();
        	y2=e.getY();
        	System.out.println("x2="+x2);
        	}
		if(i==3){
    		x3=e.getX();
        	y3=e.getY();
        	System.out.println("x3="+x3);
        	g.drawLine(x1, y1, x2, y2);
        	g.drawLine(x1, y1, x3, y3);
        	g.drawLine(x3, y3, x2, y2);
        	i=0;
        	}
	i+=1;
	}
}
public void mousePressed(MouseEvent e){
	System.out.println("按下");
	if(btnstr.equals("直线")||btnstr.equals("矩形")||btnstr.equals("圆形")||btnstr.equals("直角三角形")||btnstr.equals("等腰三角形")){
	x4=e.getX();
	y4=e.getY();
	}
	
}


public void mouseReleased(MouseEvent e){
	System.out.println("释放");
	if(btnstr.equals("直线")||btnstr.equals("矩形")||btnstr.equals("圆形")||btnstr.equals("直角三角形")||btnstr.equals("等腰三角形")){
    	x5=e.getX();
    	y5=e.getY();
    	}
	if(btnstr.equals("矩形"))
	g.drawRect(Math.min(x4, x5), Math.min(y4, y5), Math.abs(x4-x5), Math.abs(y4-y5));
	if(btnstr.equals("直线"))
		g.drawLine(x4, y4, x5, y5);
	if(btnstr.equals("圆形"))
		g.fillOval(x4, y4, Math.abs(x4-x5), Math.abs(y4-y5));
	if(btnstr.equals("直角三角形")){
		g.drawLine(x4, y4, x5, y5);
		g.drawLine(x4, y4, x4, y5);
		g.drawLine(x5, y5, x4, y5);
	}
	if(btnstr.equals("等腰三角形")){
		g.drawLine(x4, y4, x5, y5);
		g.drawLine(x4, y4, 2*x4-x5, y5);
		g.drawLine(x5, y5,2*x4-x5, y5);
	}
	
}

public void mouseEntered(MouseEvent e){
	System.out.println("进入");
}

public void mouseExited(MouseEvent e){
	System.out.println("退出");
}

}

你可能感兴趣的:(Java---简单画图板的实现)