Java学习日记:UI篇(3)--简单画图板

Java学习日记:UI篇(3)–简单画图板

        ~~~~~~~        上一次我们实现了一个页面,并加入了一些按钮、标签等组件。这次我们先用swing制作一个画图板,为之后作一个铺垫。我们先使用流式布局,制作一个画图板:思路很简单,向JFrame中使用流式布局器加入按钮,然后为按钮赋予功能。

这个画图板在之前的界面与监听器基础上加入画图功能(Graphics),实现了一些简单的画图功能。先放上一张展示图:
在这里插入图片描述
界面代码和之前的很相似,只是在之前的基础上使用了数组向界面上加入线型选择按钮、颜色选择按钮。

        DrawListener dl =new DrawListener();//调用DrawListener	
		
		String [] drawoption ={"直线","圆","矩形"};
		for(int i=0;i<drawoption.length;i++) {
			JButton btn = new JButton(drawoption[i]);
			jf.add(btn);
			btn.addActionListener(dl);
		}
		
		//Color c =new Color();		
		Color [] coloroption = {Color.BLACK,Color.blue,Color.CYAN,Color.gray,Color.GREEN,Color.red};
		Dimension dim= new Dimension(30,30);
		for(int i=0;i<coloroption.length;i++) {
			JButton btn = new JButton();
			btn.setBackground(coloroption[i]);//用颜色标明按钮,直观形象
			
			btn.setPreferredSize(dim);
			jf.add(btn);
			btn.addActionListener(dl);
		}

        ~~~~~~~        我们还会用到一个新的接口–MouseListener,用来监听我们鼠标的移动。通过计算按下、松开鼠标的坐标值,我们可以用画笔画出需要的图案。为了方便,我们可以将两个接口写到一个类下,示例如下:public class DrawListener implements MouseListener,ActionListener{}。

画图板类:

package uL;

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

public class DrawBoard {
	public void showUI() {		
		JFrame jf =new JFrame();
		jf.setTitle("画图板");
		jf.setSize(800,600);
		//jf.setLocation(null);  这是个啥东西,报错
		jf.setLocationRelativeTo(null);//默认居中
		jf.setDefaultCloseOperation(3);//关闭
		jf.setResizable(false);//固定大小
		
		FlowLayout  fl =new FlowLayout();
		jf.setLayout(fl);
				
		DrawListener dl =new DrawListener();//调用DrawListener	
		
		String [] drawoption ={"直线","圆","矩形"};
		for(int i=0;i<drawoption.length;i++) {
			JButton btn = new JButton(drawoption[i]);
			jf.add(btn);
			btn.addActionListener(dl);
		}
				
		//Color c =new Color();		
		Color [] coloroption = {Color.BLACK,Color.blue,Color.CYAN,Color.gray,Color.GREEN,Color.red};
		Dimension dim= new Dimension(30,30);
		for(int i=0;i<coloroption.length;i++) {
			JButton btn = new JButton();
			btn.setBackground(coloroption[i]);
			
			btn.setPreferredSize(dim);
			jf.add(btn);
			btn.addActionListener(dl);
		}	
		//添加组件
				
		jf.setVisible(true);//可视化

		//绑定组件
		jf.addMouseListener(dl);				
		//取画笔
		Graphics g =jf.getGraphics();
		//System.out.println(g);
		dl.g =g;				
	}
	//主函数
	public static void main(String[] args){
		DrawBoard db =new DrawBoard();
		db.showUI();		
	}	
}

监听器类:

package uL;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.ArrayList;
import javax.swing.JButton;
import java.awt.Color;
import java.awt.Graphics;


public class DrawListener implements MouseListener,ActionListener{
	int x1,x2,y1,y2;
	Graphics g;
	
	String btnstr="";
		
	ArrayList list = new ArrayList();
	
	public void actionPerformed(ActionEvent e) {
		btnstr =e.getActionCommand();//用于获得按钮上的信息
		list.add(btnstr);//将从按钮上获得的信息放入数组,可以实现:点击一个线形按钮后,换颜色不需要重新点击线形按钮即可画图
		//System.out.println(list);
		if (btnstr=="") {
			//取颜色 设置给画笔 
			 //按钮对象
			JButton btn =(JButton) e.getSource();
			Color color = btn.getBackground();//获得颜色按钮信息
			g.setColor(color);//将颜色按钮上的颜色赋给画笔
		}	
	}

	public void mouseClicked(MouseEvent e) {//点击
		//System.out.println("点击");
	}

    public void mousePressed(MouseEvent e){//按下
    	//获取按下鼠标时的坐标值
    	x1 = e.getX();
    	y1 = e.getY();
    	//System.out.println("按下");
    }
    public void mouseReleased(MouseEvent e) {//释放
    	//获取松开鼠标时的坐标值
    	x2 = e.getX();
    	y2 = e.getY(); 
    	    	
		System.out.println(btnstr);		
		String btnstr1;
		btnstr1=(String) list.get(list.size() - 1);
		int i=2;
		while(btnstr1.contentEquals("")) {
				btnstr1=(String) list.get(list.size() - i);
				i++;		
		}
		if(btnstr1.equals("直线")) {
    		//画直线			
    			g.drawLine(x1, y1, x2, y2);			
    		}
		else if(btnstr1.equals("圆")) {
		//画圆
			g.drawOval(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x2-x1), Math.abs(y2-y1));
			}
		else if(btnstr1.equals("矩形")) {
			//画矩形
			g.drawRect(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x2-x1), Math.abs(y2-y1));   	
			}    	
    }
    public void mouseEntered(MouseEvent e) {//进入界面    	
    }
    public void mouseExited(MouseEvent e) {//离开界面    	
    }    
}

结语:初学Java,还有很多东西不知道,希望大家多多指教。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值