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获取按钮上的文字或者获取事件源对象

}

}

时间: 2024-08-26 14:42:46

java画图之初体验的相关文章

Java语言的初体验

Java的独特优势:  1.  使用的频率最高.  2.具有良好的发展前景,如:服务器,移动式设备,桌面,web等领域. 了解Java的小知识. Java的开发史: Java语言是一种可以编写跨平台应用软件且面向对象的程序设计语言,由Sun公司的詹姆斯?高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak.Java随着互联网技术的应用得到了快速发展,逐渐成为重要的网络编程语言.Java从第一个版本发布到现在已经有20年的时间了,也产生了无数和Java相关的产品.技术和标准.下图回

阿里云部署Java web项目初体验

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 摘要:本文主要讲了如何在阿里云上安装JDK.Tomcat以及其配置过程.最后以一个实例来演示在阿里云上部署Java web项目. 本文实例访问:http://120.24.19.24:8080/JavaHelloWorld-0.0.1-SNAPSHOT/ (到2016.3.9就不能访问了) 本文实例下载: 一.准备工作 1.注册账号 下载完成后.可到这里https://free.aliyun

阿里云部署Java web项目初体验(转)

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 摘要:本文主要讲了如何在阿里云上安装JDK.Tomcat以及其配置过程.最后以一个实例来演示在阿里云上部署Java web项目. 本文实例访问:http://120.24.19.24:8080/JavaHelloWorld-0.0.1-SNAPSHOT/(到2016.3.9就不能访问了) war包有需要的可以来这里下载:http://download.csdn.net/detail/evan

java的多线程初体验

这里以车站售票作为模拟场景,多个票务人员同时出售某一列高铁(G250?)的车票,售票的基本保证有2点: 1.不能售出多于预定限额的车票. 2.不能售出具有相同座位的车票. 初学java,有不当的地方各位看官请指教~ 代码如下: package threadjava; public class ThreadTest4 { public static void main(String[] args) { // TODO 自动生成的方法存根 //限定总票数为100张 Seller seller = n

Protocol Buffers(protobuf)java初体验

由于项目需要所以简单的研究了下protobuf.我也是参照网上的博客,所以大部分内容我也就不重复造轮子了.首先protobuf介绍点击这里,使用介绍点击这里,使用demo看这里.我个人的第一个例子也是参照这个demo来的,不过其中我有遇到一些问题,所以揪出来说说,也就给自己做个笔记,方便查阅. 基本的东西相信大家也了解了,直接步入主题了: 1.限定修饰符介绍 required\optional\repeated,之前给定的博客已经有这个介绍了我也不多说,这里把一些小玩儿拿出来讲讲 ①.requi

好程序员Java学习路线分享JDBC初体验

好程序员Java学习路线分享JDBC初体验,JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成.JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序 -?Java 具有坚固.安全.易于使用.易于理解和可从网络上自动下载等特性,是编写数据库应用程序的杰出语言.所需要的只是 Java应用程序与各种不同数据库之

【Spark深入学习 -15】Spark Streaming前奏-Kafka初体验

----本节内容------- 1.Kafka基础概念 1.1 出世背景 1.2 基本原理 1.2.1.前置知识 1.2.2.架构和原理 1.2.3.基本概念 1.2.4.kafka特点 2.Kafka初体验 2.1 环境准备 2.2 Kafka小试牛刀 2.2.1单个broker初体验 2.2.2 多个broker初体验 2.3 Kafka分布式集群构建 2.3.1 Kafka分布式集群构建 2.3.2 Kafka主题创建 2.3.3 生产者生产数据 2.3.4消费者消费数据 2.3.5消息的

Java8初体验(二)Stream语法详解

原文链接:http://ifeve.com/stream/ 1. Stream初体验 我们先来看看Java里面是怎么定义Stream的: A sequence of elements supporting sequential and parallel aggregate operations. 我们来解读一下上面的那句话: Stream是元素的集合,这点让Stream看起来用些类似Iterator: 可以支持顺序和并行的对原Stream进行汇聚的操作: 大家可以把Stream当成一个高级版本的

hibernate--CRUD初体验

hibernate的crud操作初体验. 看具体实例 package com.fuwh.model; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import org.hibernate.annotations.GenericGenerator; @Entity publ