java绘制图形_Java绘制图形
1、了解什么是事件监听
写好一个界面后,我们就会对界面进行一些操作。比如,在输入框中输入数据,点击按钮或者菜单。这些操作我们称之为一个事件。
就比如我们要监视一间房子中会发生什么事情,就会给这间房子装上一个摄像头。对于事件的处理在Java中有类似的机制。我们要监视一个按钮有没有被点击,就要给按钮装上一个类似监听器的东西。这个东西我们就叫做事件监听机制。
而监听按钮有没有被点击的这种机制就是事件监听机制。
在Java中,每个事件都对应有一个事件监听器。它们被定义在Java.awt.event这个包中。
练习:实现绘制直线、矩形、圆、圆角矩形、弧线、文字、图片、填充矩形、填充3D矩形、任意多边形。图片要使用ImageIcon getImage()
分析:
界面的实现
DrawMain.java
main()
initUI(){
实例化窗体对象,设置窗体的属性值
}
功能的实现
在窗体上按下鼠标按键,然后释放鼠标按键,在按下和释放的亮点之间绘制一个图形。
事件监听机制
事件源对象:窗体对象
事件监听方法:addMouseListener(MouseListener l);鼠标事件监听方法
事件接口(事件处理类):MouseListener
1、定义一个主类,创建一个主类新对象。
publicclassDrawmain{
public static void main(String[] args) {
Drawmain dm = new Drawmain();
dm.initUI();
}
2、实现初始化方法
在屏幕上显示出一个窗体,并且设置窗体的大小,背景颜色,窗体可见
public void initUI() {
JFrame frame = new JFrame();
Drawlistener dr = new Drawlistener();
frame.setTitle("画图界面");
frame.setSize(800, 600);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(3);
3、定义一个事件接口(事件处理类)
a、public class Drawlistener implements MouseListener
{
}
b、打开API文档,重写MouseListener的所有方法(将“;”改为“{}”即为重写)
/**
* Invoked when the mouse button has been clicked (pressed and released) on a component.
*/
public void mouseClicked(MouseEvent e){}
/**
* Invoked when a mouse button has been pressed on a component.
*/
public void mousePressed(MouseEvent e){}
/**
* Invoked when a mouse button has been released on a component.
*/
public void mouseReleased(MouseEvent e){}
/**
* Invoked when the mouse enters a component.
*/
public void mouseEntered(MouseEvent e){}
/**
* Invoked when the mouse exits a component.
*/
public void mouseExited(MouseEvent e){}
c、定义两个坐标,为全局变量
Private int x1,y1,x2,y2;
d、连接坐标位置
以画直线为例:
涉及到的鼠标动作为按下释放,在按下的时候我们可以得到(x1,y1)
public void mousePressed(MouseEvent e){
x1 = e.getX();
y1 = e.getX();
}
在释放的时候得到(x2,y2)
public void mouseReleased(MouseEvent e){
x2 = e.getX();
y2 = e.getX();
}
有了这两个坐标,然后我们就可以用画笔来画直线了。
但是Graphics类是一个抽象类。
抽象类Graphics提供了一个与平台无关的绘图接口。(这样我们就可以一个编写,各处执行了,符合Java的特点)
那么要在一个平台上去执行这个程序的时候,让程序实现绘图,肯定还得有实现了Graphics类的子类对象,为我们提供绘图环境。
各平台上实现的Java系统将创建Graphics类的一个子类,来实现绘图功能,但是这个子类对程序员是透明的
因为窗体上自带画笔所以我们先在
Drawlistener类中定义:Graphics gra;
再在Drawmain主类中创建一个Drawlistener类的对象;
Drawlistener dr = new Drawlistener();
dr.gra = frame.getGraphics();
这样我们就把画笔传过去了。
然后就可以画直线了?并不是的,我们还得给窗体加上监听方法
frame.addMouseListener(dr)
注意:a、画曲线是在MouseMotionListener接口中
public void mouseDragged(MouseEvent e){}
public void mouseMoved(MouseEvent e){}
同样得重写这两个方法
b、传画笔一定得在窗体可见之后
代码:
主类
package lhy4_20.draw;
mport java.awt.Color;
mport java.awt.Graphics;
import javax.swing.Icon;
import javax.swing.JButton;
import javax.swing.JFrame;
public class Drawmain {
public static void main(String[] args) {
Drawmain dm = new Drawmain();
dm.initUI();
}
public void initUI() {
JFrame frame = new JFrame();
frame.setTitle("画图界面");
frame.setSize(800, 600);
frame.setLocationRelativeTo(null);//窗体会显示在屏幕的正中央
frame.setDefaultCloseOperation(3);//窗体关闭操作
frame.setVisible(true);
Drawlistener dr = new Drawlistener();// 实例化鼠标监听对象;
// 从窗体上获取画布对象;
dr.gra = frame.getGraphics();
//给窗体加上事件监听方法;
frame.addMouseListener(dr);
frame.addMousemotionListener(dr);
事件处理类
package lhy4_20.draw;
//定义事件处理类;该类继承来自MouseListener接口的所有属性方法;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
public class Drawlistener implements MouseListener ,MouseMotionListener {
// 实现接口中的所有抽象方法;
// 定义坐标位置;
// 连接坐标位置;
/*
* private int[] xPoints = { 25, 75, 125, 85, 125, 75, 25, 65 };
* private int[] yPoints = { 40, 90, 50, 90, 150, 110, 150, 90 };
*
* String str = "Today is rainning";
*
* private char data[] = { '今', '天', '是', '星', '期', '六' };
*
* private byte data_1[] = { '0', '2', '1', '0', '9', '4' };
*/
private int x1, y1, x2, y2,x3,y3;
Graphics gra;
Graphics2D g2;
ImageIcon img;
String str;
int i;
public void mouseClicked(MouseEvent e) {
}
// 鼠标按下
public void mousePressed(MouseEvent e) {
x1 = e.getX();
y1 = e.getY();
}
// 鼠标释放
public void mouseReleased(MouseEvent e) {
x2 = e.getX();
y2 = e.getY();
// 坐标弄好后,开始画线;
// 画直线;
// gra.drawLine(x1, y1, x2, y2);
// 画矩形;
/*
* if(x1
* if(x1>x2) { gra.drawRect(x2,y2,Math.abs(x2-x1),Math.abs(y1-y2));
*
* } System.out.println(x1+","+y1+" "+x2+","+y2);
*/
// 自动填充;
// gra.fillRect(Math.min(x1,x2),Math.min(y1,y2),Math.abs(x2-x1),Math.abs(y1-y2));
// 画圆;
/*
* gra.drawOval(Math.min(x1,x2),
* Math.min(y1,y2),Math.abs(x2-x1),Math.abs(y1-y2));
* System.out.println(x1+","+y1+" "+x2+","+y2);
*/
// 自动填充圆;
// gra.fillOval(x1, y1, x2, y2);
// gra.clipRect(Math.min(x1, x2),Math.min(y1,y2),Math.abs(x2-x1),Math.abs(y2-y1));
// 画圆角弧形
// gra.drawRoundRect(Math.min(x1,x2), Math.min(y1,y2), Math.abs(x2-x1),
// Math.abs(y1-y2), Math.abs(x2/2-x1/2), Math.abs(y2/2-y1/2));
// gra.fillRoundRect(Math.min(x1,x2), Math.min(y1,y2), Math.abs(x2-x1),
// Math.abs(y1-y2), Math.abs(x2/2-x1/2), Math.abs(y2/2-y1/2));
// gra.drawArc(Math.min(x1,x2), Math.min(y1,y2), Math.abs(x2-x1),
// Math.abs(y1-y2),60, 90);
// gra.fillArc(Math.min(x1,x2), Math.min(y1,y2), Math.abs(x2-x1),
// Math.abs(y1-y2),30, 45);
// gra.drawPolyline(xPoints,yPoints,8);
// gra.drawPolygon(xPoints,yPoints,8);
// 画出给定的字符串
// gra.drawString(str, x1, y1);
// 画出数组data中给定初始位置的一定长度的文本字符串;
// gra.drawChars(data, 2, 3, x1, y1);
// 画出数组data中给定初始位置的一定长度的数字字符串;
// gra.drawBytes(data_1, 2, 4, x2, y2);
// ImageIcon img = new ImageIcon("src/图片.jpeg");
// gra.drawImage(img.getImage(), x1/2, y1/2, null);
// ImageIcon img = new ImageIcon("src/图片.jpeg");
//
//
// gra.drawImage(img.getImage(), x1/2, y1/2,x1, y1,Color.BLUE,null);
// gra.setColor(Color.GREEN);
// gra.fillRect(x1/2,y1/2 , 300, 300);
}
// 实现拖动动作
public void mouseDragged(MouseEvent e) {
/* gra.drawLine(x1, y1, x2, y2); */
// 实现曲线绘制;
/*
* gra.fillRect(Math.min(x2, x1),Math.min(y2, y1), Math.abs(x1-x2),Math.abs(y1-y2));
*/
/*
* gra.fillOval(Math.min(x2, x1),Math.min(y2, y1), Math.abs(x1-x2), Math.abs(y1-y2));
*/
/* gra.drawArc(x1, y1, y1/2, 2*x1, 30, 60) */;
/*
* ImageIcon img = new ImageIcon("src/图片.jpeg");
* gra.drawImage(img.getImage(), x1/2, y1/2, null);
*/
/*
* gra.clearRect(Math.min(x2, x1),Math.min(y2, y1), Math.abs(x1-x2), Math.abs(y1-y2));
*/
/*
* for(int i=0;i<3;i++)
{ x1=x1+i; y1=y1+i;
* x2=x2+i;
y2=y2+i;
gra.drawLine(x1,y1, x2, y2);
}
*/
/*
* g2 = (Graphics2D)gra; g2.setStroke(new BasicStroke(33));
*
* /*g2.drawLine(x1, y1, x2, y2);
*/
/* g2.draw3DRect(x1, y1, Math.abs(x1-x2), Math.abs(y1-y2),true); */
/*
* g2.fill3DRect(Math.min(x1,x2), Math.min(y1,y2), Math.abs(x2-x1), Math.abs(y1-y2), true);
*/
/*
* g2.fill3DRect(Math.min(x1,x2), Math.min(y1,y2), Math.abs(x2-x1), Math.abs(y1-y2), true); g2.clearRect(x2/3,y1, x1/2, y1/3);
x1 = x2;
* y1 = y2;
*
*
* /*g2.setBackground(Color.pink);
*/
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
public void mouseMoved(MouseEvent e){}
}
java绘制图形_Java绘制图形相关推荐
- java绘制图形_java绘制基本图形.doc
java绘制基本图形 java绘制基本图形 1. * *** ***** 2. * * * ***** 3. ************* * * * * ************* 4. ****** ...
- java绘画图形_java – 动态图形对象绘画
试图找出最好的方法来做到这一点(并且没有跨越任何具体细节,不是我不知道的). 我正在以可视方式显示图形(各种节点,边缘连接它们),圆圈和线条代表这样.每个节点都将在运行时添加,我无法对其进行硬编码.根 ...
- java水平线代码_java 绘制直线,跪求源代码???
在几何中,直线是向两端无限延伸的,本实例所说的绘制直线,实际上是绘制直线上两点之间的线段,线段在实际生产和生活中经常使用.运行程序,将在窗体上绘制线段,效果如图1.1所示.图... 在几何中,直线是向 ...
- java 字母图形_Java字母图形
问题描述 利用字母可以组成一些美丽的图形,下面给出了一个例子: ABCDEFG BABCDEF CBABCDE DCBABCD EDCBABC 这是一个5行7列的图形,请找出这个图形的规律,并输出一个 ...
- java jpanel隐藏_java – 绘制JPanel隐藏菜单
我有一个JPanel,在其上执行自定义绘画,可能需要15秒. 问题是当我在绘制JPanel的同时点击一个菜单时,绘画正在菜单上完成,并且选项不可见. (见图中扭曲的文字) 如果我在绘画完成后单击菜单, ...
- java绘制棋盘_java绘制五子棋棋盘
本文实例为大家分享了java绘制五子棋棋盘的具体代码,供大家参考,具体内容如下 源码: import javax.imageio.ImageIO; import javax.swing.*; impo ...
- java五子棋棋盘_java绘制五子棋棋盘代码示例
本篇文章小编给大家分享一下java绘制五子棋棋盘代码示例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 代码如下: import javax.imag ...
- java drawstring 模糊_Java绘制文字质量太低的解决方案?
使用 Graphics2D 绘图结果如下: 文字周边非常模糊.想要效果是: 请问如何使用java实现这种清晰的绘制文字的效果呢? 更新 代码如下: public static void pressTe ...
- 实验楼Java写计算器_Java版图形界面计算器
Java 版图形界面计算器 实验说明及介绍 环境登录 无需密码自动登录,系统用户名 shiyanlou,密码 shiyanlou 环境介绍 本实验环境采用带桌面的 Ubuntu Linux 环境,实验 ...
最新文章
- 北大吴思教授:人脑视觉机制有望开启下一代深度神经网络
- 【Deep Learning笔记】神经网络基础
- Android LayoutInflater详解(转)
- 实验任务四:登录界面、实验任务五:猜数字
- eplan可运行于linux系统吗,Eplan安装对电脑操作系统的要求
- linux df命令功能,Linux df命令简要介绍
- gradle groovy_适用于Java开发人员的Groovy吗? 认识Gradle,Grails和Spock
- JDK1.8中如何用ScriptEngine动态执行JS
- python怎样画动态文字_Python制作动态字符图的实例
- ubuntu18 安装完怎么设置中文输入法?
- jenkins-邮件通知
- Thread-start()-,它是怎么让线程启动的呢,Java面试问项目
- 防淘宝关闭二维码案例
- 小爱音箱 电脑 麦克风_外观全面升级,小米小爱音箱Art体验
- Shell到底是什么?
- matlab添加坐标,Matlab绘图添加直角坐标轴
- 图像坐标球面投影_一种将球面图像投影至平面图像的方法与流程
- java里面case是什么意思_什么是Java中的switch case语句以及如何使用它?
- 四旋翼自主飞行器探测跟踪系统项目的随笔
- 陈怡暖:非农克星LMCI数据今晚出炉
热门文章
- 演讲《云图,让阅读更精彩(Better Cloudary™, Better Reading)》
- Bzoj2732 [HNOI2012]射箭
- Sublime text 3 SVN插件及使用方法
- proc文件系统探索 之 以数字命名的目录
- UVA 11367 Full Tank? 最短路
- Oracle中的AWR,全称为Automatic Workload Repository
- django的动态url,url里含有参数,含有参数的url
- 《软件需求十步走》阅读笔记5
- 斯坦福《机器学习》Lesson4感想--1、Logistic回归中的牛顿方法
- csu 最优对称路径(bfs+记忆化搜索)