java 实现画图_Java---简单画图板的实现

本文介绍如何利用Java的awt和swing库,结合动作和鼠标监听器,实现一个简单的画图板应用。该应用允许用户选择绘制直线、矩形、圆形、三角形,并能改变颜色。
摘要由CSDN通过智能技术生成

利用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("退出");

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值