java画图之初体验

Posted 夜空中最亮的星

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java画图之初体验相关的知识,希望对你有一定的参考价值。

1.实现画图程序所需的API类

         JFrame

         JButton

         ActionListener              动作事件接口

         ActionEvent                        动作事件对象类             

获取按钮上的文字或者获取事件源对象 getActionCommand();

         MouseListener                  鼠标事件接口

         MouseEvent                       鼠标事件对象类              获取发生动作的坐标值

         Graphics                     画笔画布类                       提供绘制图形的方法

 

2.界面实现

         DrawFrame extends JFrame

 

3.功能实现

         在窗体上按下鼠标按键,然后释放鼠标按键,在按下和释放的两点之间绘制一条直线。

         事件机制

                   1.事件源对象:窗体对象

                   2.事件监听方法:addMouseListener(MouseListener l);

                   3.事件接口(事件处理类):MouseListener   接口不能实例化对象,需要定义类实现接口,这个类就是事件处理类。

        

         实现步骤:

                   1.新建一个DrawListener事件处理类,该类实现MouseListener鼠标事件接口,实现接口中的抽象方法。

                   2.定义四个整数类型类型变量,用来存储按下和释放动作的坐标值。

                   3.定义一个Graphics画笔画布类的对象名,调用绘制图形的方法。

                            你要在哪一个组件上绘制图形,那么你的画笔画布对象就从这个组件上获取。

                            在窗体上绘制图形,那Graphics就要窗体上获取。

                           

                   4.在DrawFrame类中实例化DrawListener事件处理类的对象dl;

                   5.给事件源窗体对象添加addMouseListener()鼠标监听方法,指定事件处理类对象dl.

        

4.练习

   画直线,矩形,多边形和圆

 

 

/*      1.新建一个DrawListener事件处理类,该类实现MouseListener鼠标事件接口,实现接口中的抽象方法。

                   2.定义四个变量,在按下和释放方法中获取按下和释放的坐标值。

                   3.定义Grpahics画笔画布类的对象,调用绘制图形的方法来画图。

                            我们的组件是画出来的,那么你要在哪一个组件上画图形,那你的画笔画布对象就从这个组件上获取。

                   4.实例化DrawListener事件处理类的对象,对象名dl

                   5.给事件源窗体对象添加addMouseListener()鼠标监听方法,指定事件处理类对象dl.

*/

package wenya529;

 

import java.awt.FlowLayout;

import java.awt.Graphics;

 

import javax.swing.JButton;

import javax.swing.JFrame;

 

/**

 * 定义一个画图界面类,该类继承自JFrame窗体类

 */

public class drawFrame extends JFrame {

         /**

          * 程序入口主函数

          */

         public static void main(String[] args) {

                   // 实例化窗体类的对象,调用初始化界面的方法

                   drawFrame df = new drawFrame();

                   df.initUI();

         }

 

         /**

          * 自定义初始化界面的方法

          */

         public void initUI() {

                   setTitle("图画");

                   setSize(600, 500);

                   setDefaultCloseOperation(3);

                   setLocationRelativeTo(null);

                   setLayout(new FlowLayout());

                   JButton butLine = new JButton("直线");

                   add(butLine);

                   JButton butSharp = new JButton("矩形");

                   add(butSharp);

                   JButton butAngle = new JButton("多边形");

                   add(butAngle);

                   JButton butHair = new JButton("圆");

                   add(butHair);

                   setVisible(true);      

                   //获取窗体上画笔画布对象(注意:必须要在窗体可见之后才能获取画笔画布对象,否则获取的是null)

             Graphics g = getGraphics();

             //4.实例化DrawListener事件处理类的对象,对象名dl

         drawListener dl = new drawListener();

         //5.给事件源窗体对象添加addMouseListener()鼠标监听方法,指定事件处理类对象dl.

         addMouseListener(dl);

         //调用画图Graphics

         dl.setGraphics(g);

         //按钮的动作监听,按钮是事件源,也就是说只有当按下按钮才会执行画图的动作,可以参考登录界面的验证登录

         butLine.addActionListener(dl);

         butSharp.addActionListener(dl);

         butAngle.addActionListener(dl);

         butHair.addActionListener(dl);

        

         }

}

 

 

 

 

package wenya529;

 

import java.awt.Graphics;

import java.awt.Point;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.MouseEvent;

import java.awt.event.MouseListener;

import java.awt.geom.Point2D;

 

/**

 * 1.新建一个DrawListener和ActionListener事件处理类,该类实现MouseListener鼠标事件实现和ActionListener接口,实现接口中的抽象方法。

 */

public class drawListener implements MouseListener, ActionListener {

         private int x1, y1, x2, y2;// 声明四个整数变量,用来记录按下和释放时的坐标值

         private int x, y, width, height;

         private int x3, y3, x4, y4;

         private int x5,y5,x6,y6;

         public int ys,xs;

         public int d=0;//设置一个全局变量,把直线上的第二个点作为下一条直线的第一个点

 

         private Graphics g;// 声明一个画笔画布类的对象名

         private String type;

 

 

         // 向DrawFrame借画笔画布类的对象

         public void setGraphics(Graphics gra) {

                   g = gra;// 把gra传给drawFrame中的g

         }

 

         /**

          * 当你在事件源上发生鼠标点击动作时执行的方法。(在同一个位置上按下并释放才会执行点击)

          */

        

        

         public void mouseClicked(MouseEvent e) {

                   x = e.getX();

                   y = e.getY();

                   width = e.getX();

                   height = e.getY();

                   if (type.equals("圆")) {

                            // 调用绘制圆的方法

                            g.drawOval(x, y, width, height);

                   }

                   x3 = e.getX();

                   x4 = e.getX();

                   y4 = e.getY();

                   y3 = e.getY();

                   if (type.equals("矩形")) {

 

                            g.drawRect(x3,x4,y3,y4);

                   }

 

         }

 

         /**

          * 当你在事件源上发生鼠标按下动作时执行的方法。

          */

         public void mousePressed(MouseEvent e) {

                   // 记录按下的坐标值O

                   x1 = e.getX();

                   y1 = e.getY();

                   x5 = e.getX();

                   y5 = e.getY();

 

         }

 

         /**

          * 当你在事件源上发生鼠标释放动作时执行的方法。

          */

         public void mouseReleased(MouseEvent e) {

                   // 记录释放的坐标值O

                   x2 = e.getX();

                   y2 = e.getY();

                  

                   if (type.equals("直线")) {

                            // 调用绘制直线的方法

                            g.drawLine(x1, y1, x2, y2);

                           

                   }

                   x6= e.getX();

                   y6 = e.getY();

                   if (type.equals("多边形")) {

                            // 调用绘制直线的方法

                            if(d==0){

                            g.drawLine(x1, y1, x2, y2);

                            ys=y2;

                            xs=x2;      

                            d++;}

                            else if(d==1){

                                     g.drawLine(xs, ys, x2, y2);

                                    

                            }

                            xs=x2;

                            ys=y2;

                   }

         }

 

         /**

          * 当你的鼠标进入到事件源是行时执行的方法。

          */

         public void mouseEntered(MouseEvent e) {

 

         }

 

         /**

          * 当你的鼠标离开到事件源是行时执行的方法。

          */

         public void mouseExited(MouseEvent e) {

         }

//实现ActionListener的抽象方法

         public void actionPerformed(ActionEvent e) {

                   type = e.getActionCommand();// ActionCommand获取按钮上的文字或者获取事件源对象

         }

 

}

以上是关于java画图之初体验的主要内容,如果未能解决你的问题,请参考以下文章

Java 转 Go 之初体验

Java 转 Go 之初体验

程序员之初体验:开发环境部署

Android开发学习之路--RxAndroid之初体验

[Jmeter]jmeter之初体验(windows下的jmeter)

并发王者课-青铜1:牛刀小试-如何创建线程之初体验