本文实例讲述了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绘制操作示例相关推荐

  1. java final的内存_Java并发编程之final域的内存语义

    一.final域的重排序规则 对于final域,编译器和处理器要遵循两个重拍序规则: 1.在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序 ...

  2. java 高级编程进阶_JAVA高级编程之hibernate进阶学习

    二级缓存 hibernate的session缓存 在事务级别进行持久化数据的缓存操作. 当然,也有可能分别为每个类(或集合),配置集群.或 JVM 级别(SessionFactory 级别)的缓存.你 ...

  3. pyhton GUI编程之Tkinter详细讲解二

    文章目录 Tkinter详细讲解 pyhton GUI编程之Tkinter详细讲解二 4. 组件用法 4.1 文本输入和输出相关控件 4.1.1 Lable标签 4.1.2 Message消息 4.1 ...

  4. java 时间戳_Java并发编程之CAS三CAS的缺点 及解决办法

    Java并发编程之CAS第三篇-CAS的缺点 通过前两篇的文章介绍,我们知道了CAS是什么以及查看源码了解CAS原理.那么在多线程并发环境中,的缺点是什么呢?这篇文章我们就来讨论讨论 本篇是<凯 ...

  5. java线程安全的set_Java并发编程之set集合的线程安全类你知道吗

    Java并发编程之-set集合的线程安全类 Java中set集合怎么保证线程安全,这种方式你知道吗? 在Java中set集合是 本篇是<凯哥(凯哥并发编程学习>系列之<并发集合系列& ...

  6. Java GUI编程之AWT和Swing

    目的:为了了解MVC架构,了解监听,我们有必要学习Java GUI 编程. 一. AWT:抽象窗口工具箱. 1.弹出窗口实例: package GUI;import java.awt.*;public ...

  7. java udp 同一个端口实现收发_Java网络编程之UDP协议

    伙伴们注意了! 小编在这里给大家送上关注福利: 搜索微信公众号"速学Java"关注即可领取小编精心准备的资料一份! 今天我们来聊聊 网络编程这部分的内容 网络编程 1)计算机网络 ...

  8. java并发编程_Java并发编程之 synchronized

    大家好,我是你们的导师,我每天都会在这里给大家分享一些干货内容(当然了,周末也要允许老师休息一下哈).上次老师跟大家分享了下Java中内存泄漏如何分析解决的相关知识,今天跟大家分享Java之 sync ...

  9. udp java 编程_JAVA 网络编程之UDP编程

    多线程,网络编程,反射,集合是java语言的重头戏,其中反射是java一切框架的基石. 客户端: SocketAddress sa =new  InetSocketAddress("10.1 ...

最新文章

  1. 服务器插显示器黑的,服务器插显示器不显示
  2. php的bom头会影响格式,phpBOM头(字符#65279;)出现的原因以及解决方法_PHP程序员博客|高蒙个人博客...
  3. CSS3 Transitions 你可能不知道的知识点
  4. AES加密算法256位密钥与128位密钥的不同之处
  5. [唐诗]183清平调词三首-李白
  6. python pip 重新安装mysql_解决Ubuntu pip 安装 mysql-python包出错的问题
  7. rijndael 加密算法
  8. MySQL基础知识系统学习
  9. HQChart实战教程6-自定义分时图
  10. linux iio子系统
  11. 几百本计算机类常用书籍
  12. Linux 必学的几个命令
  13. ArcGIS空间插值方法反距离权重法(IDW)的工作原理
  14. 计算机卡慢解决方法,电脑很卡怎么办,详细教您电脑很卡很慢应该怎么解决
  15. notepad++分隔符SOH
  16. 【蓝桥杯选拔赛真题07】python输出乘积 青少年组蓝桥杯python 选拔赛STEMA比赛真题解析
  17. Syslog-ng3.5 mysql 日志服务器
  18. 万物智联,美格智能NB-IoT模组助力智慧防疫,防患于“未燃”
  19. [转载]陕南特产-诱人的秦岭四亩地土蜂蜜_陕南赤子_新浪博客
  20. 最短编辑距离(动态规划超详细填表法)

热门文章

  1. 类模板 - C++快速入门45
  2. 排序算法之 Heap Sort
  3. KEIL MDK access violation at 0x40021000 : no ‘read‘ permission的一种解决方法
  4. 推荐系统之粗排扮演的角色和算法发展历程
  5. python资格认证_Python怎么实现在后端的自定义认证并且实现多条件登陆
  6. 1368 DNA Consensus String
  7. 蓝桥杯 入门训练 Fibonacci数列
  8. python入门——数字+字符串
  9. 吴恩达机器学习学习笔记第二章:单变量线性回归
  10. Linux入门(1)_VMware和系统分区和系统安装和远程登陆管理