java paint的使用_java GUI编程之paint绘制操作示例
本文实例讲述了java GUI编程之paint绘制操作。分享给大家供大家参考,具体如下:
import java.awt.*;
public class Testpint {
public static void main(String[] args) {
// new TFPaint().lunchPaint();
new TFPaint();
}
}
class TFPaint extends Frame{
/*
public void lunchPaint() {
this.setBounds(200, 200, 640, 640);
this.setBackground(Color.BLUE);
this.setVisible(true);
}
*/
TFPaint(){
this.setBounds(200, 200, 200, 200);
this.setBackground(Color.BLUE);
this.setVisible(true);
}
public void paint(Graphics g) {
Color c = g.getColor();
g.setColor(Color.BLACK);
g.fillRect(60, 60, 30, 30);
g.setColor(Color.CYAN);
g.fillOval(80, 80, 40, 40);
g.setColor(c);
}
}
paint方法是container类的一个方法,其能够实现绘图的功能,其是本身自带的方法,我们相当于重写了这个方法,在调用时我们用到了参数(Graphics g),一个画笔,用g来实现绘画,Frames是container的一个子类,所以我们在Frame里重写了Paint方法。
注;Color c = g.getColor(),和g.setColor(c),相当于把画笔用完后,重新置为原来的颜色。
Paint 的一个实例,外加MouseMonitor的介绍。
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class TestPaint2 {
public static void main(String[] args) {
new TFpaint("Draw");
}
}
class TFpaint extends Frame{
ArrayList pointList = null;
TFpaint(String s){
super(s);
pointList = new ArrayList();
this.setLayout(null);
this.setBounds(200, 200, 400, 400);
this.setBackground(Color.blue);
this.setVisible(true);
this.addMouseListener(new MyMouseMonitor());
}
public void paint(Graphics g ) {
Iterator i = pointList.iterator();
while(i.hasNext()) {
Point p = (Point)i.next();
g.setColor(Color.BLACK);
g.fillOval(p.x, p.y, 10, 10);
}
}
public void addPoint(Point p) {
pointList.add(p);
}
}
class MyMouseMonitor extends MouseAdapter{
public void mousePressed(MouseEvent e) {
TFpaint f = (TFpaint) e.getSource();
f.addPoint(new Point(e.getX(),e.getY()));
f.repaint();
}
}
基本要求:实现在一个界面上鼠标每点击一下,就会生成一个点,
基本思路:要有一个Frame,用来显示界面,由于需要在这个界面上产生点,所以我们有鼠标点击产生点,即有对鼠标的监听,而我们要在监听后产生点,所以我们有Paint方法用来绘图,而他绘制的图就是产生一个点。
其中较为麻烦的就是,必须在指定位置(即鼠标点击的位置产生一个点)如何来找到这个位置,在此时我们在MouseMonitor中利用e.getSource获得信息,其中e是点击这个事件发生时,我们把他包装成一个类,传输给Monitor(其内部含有事件处理方法)
注:在Frame中我们要显示多个点,所以我们建立了一个ArrayList,用来存储点类型数据,在Frame中存储的过程就相当于画在了上面,
getSource是重新定义到一个新的来源,如上文,我们把e的getSource赋值给了f(一个Frame)相当于对frame进行添加,即Frame拿到了属于Monitor的画笔,我们通过e.getx,e和e.gety,进行定位,x,y,确定的就是鼠标点击的点,addpoint,相当于点一下在Frame上添加一个点,而print就是把哪些点用圆圈表示出来,
由于点数据是用ArrayList存储的所以对应的我们进行索引的时候用了Iterator,只要在列表里有一个点就用圆圈表示出来。
repaint,是将画面重新显示出来,感觉相当于刷新界面,如果没有,在界面上虽然有点但是他不显示,只有重传界面(即界面刷新时才会出现)
希望本文所述对大家java程序设计有所帮助。
java paint的使用_java GUI编程之paint绘制操作示例相关推荐
- java final的内存_Java并发编程之final域的内存语义
一.final域的重排序规则 对于final域,编译器和处理器要遵循两个重拍序规则: 1.在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序 ...
- java 高级编程进阶_JAVA高级编程之hibernate进阶学习
二级缓存 hibernate的session缓存 在事务级别进行持久化数据的缓存操作. 当然,也有可能分别为每个类(或集合),配置集群.或 JVM 级别(SessionFactory 级别)的缓存.你 ...
- pyhton GUI编程之Tkinter详细讲解二
文章目录 Tkinter详细讲解 pyhton GUI编程之Tkinter详细讲解二 4. 组件用法 4.1 文本输入和输出相关控件 4.1.1 Lable标签 4.1.2 Message消息 4.1 ...
- java 时间戳_Java并发编程之CAS三CAS的缺点 及解决办法
Java并发编程之CAS第三篇-CAS的缺点 通过前两篇的文章介绍,我们知道了CAS是什么以及查看源码了解CAS原理.那么在多线程并发环境中,的缺点是什么呢?这篇文章我们就来讨论讨论 本篇是<凯 ...
- java线程安全的set_Java并发编程之set集合的线程安全类你知道吗
Java并发编程之-set集合的线程安全类 Java中set集合怎么保证线程安全,这种方式你知道吗? 在Java中set集合是 本篇是<凯哥(凯哥并发编程学习>系列之<并发集合系列& ...
- Java GUI编程之AWT和Swing
目的:为了了解MVC架构,了解监听,我们有必要学习Java GUI 编程. 一. AWT:抽象窗口工具箱. 1.弹出窗口实例: package GUI;import java.awt.*;public ...
- java udp 同一个端口实现收发_Java网络编程之UDP协议
伙伴们注意了! 小编在这里给大家送上关注福利: 搜索微信公众号"速学Java"关注即可领取小编精心准备的资料一份! 今天我们来聊聊 网络编程这部分的内容 网络编程 1)计算机网络 ...
- java并发编程_Java并发编程之 synchronized
大家好,我是你们的导师,我每天都会在这里给大家分享一些干货内容(当然了,周末也要允许老师休息一下哈).上次老师跟大家分享了下Java中内存泄漏如何分析解决的相关知识,今天跟大家分享Java之 sync ...
- udp java 编程_JAVA 网络编程之UDP编程
多线程,网络编程,反射,集合是java语言的重头戏,其中反射是java一切框架的基石. 客户端: SocketAddress sa =new InetSocketAddress("10.1 ...
最新文章
- 服务器插显示器黑的,服务器插显示器不显示
- php的bom头会影响格式,phpBOM头(字符#65279;)出现的原因以及解决方法_PHP程序员博客|高蒙个人博客...
- CSS3 Transitions 你可能不知道的知识点
- AES加密算法256位密钥与128位密钥的不同之处
- [唐诗]183清平调词三首-李白
- python pip 重新安装mysql_解决Ubuntu pip 安装 mysql-python包出错的问题
- rijndael 加密算法
- MySQL基础知识系统学习
- HQChart实战教程6-自定义分时图
- linux iio子系统
- 几百本计算机类常用书籍
- Linux 必学的几个命令
- ArcGIS空间插值方法反距离权重法(IDW)的工作原理
- 计算机卡慢解决方法,电脑很卡怎么办,详细教您电脑很卡很慢应该怎么解决
- notepad++分隔符SOH
- 【蓝桥杯选拔赛真题07】python输出乘积 青少年组蓝桥杯python 选拔赛STEMA比赛真题解析
- Syslog-ng3.5 mysql 日志服务器
- 万物智联,美格智能NB-IoT模组助力智慧防疫,防患于“未燃”
- [转载]陕南特产-诱人的秦岭四亩地土蜂蜜_陕南赤子_新浪博客
- 最短编辑距离(动态规划超详细填表法)
热门文章
- 类模板 - C++快速入门45
- 排序算法之 Heap Sort
- KEIL MDK access violation at 0x40021000 : no ‘read‘ permission的一种解决方法
- 推荐系统之粗排扮演的角色和算法发展历程
- python资格认证_Python怎么实现在后端的自定义认证并且实现多条件登陆
- 1368 DNA Consensus String
- 蓝桥杯 入门训练 Fibonacci数列
- python入门——数字+字符串
- 吴恩达机器学习学习笔记第二章:单变量线性回归
- Linux入门(1)_VMware和系统分区和系统安装和远程登陆管理