java GUI编程之paint绘制操作示例
作者:qq_42412646 发布时间:2023-11-24 17:58:39
本文实例讲述了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程序设计有所帮助。
来源:https://blog.csdn.net/qq_42412646/article/details/102395554


猜你喜欢
- 本文实例为大家分享了C语言实现银行系统的具体代码,供大家参考,具体内容如下1.实现要求生成一个1000-1000000之间的随机数来代表账户
- 本文研究的主要是java中的null“类型”的相关实例,具体介绍如下。先给出一道简单的null相关的题目,引发我们对null的探讨,后面会根
- 一、前言介绍:1.1 项目摘要 信息内容数据从传统到当今,一直在改变,忽然互联网技术让传统信息内容管理见到划时代的黎明
- 1.使用多线程的几种方式(1)不需要传递参数,也不需要返回参数ThreadStart是一个委托,这个委托的定义为void ThreadSta
- 1. Java中程序的逻辑控制语句1.1顺序结构顺序结构比较简单,按照代码书写的顺序一行一行执行1.2分支结构1.2.1 switch语句这
- 本文实例讲述了Java编程实现判断网上邻居文件是否存在的方法。分享给大家供大家参考,具体如下:由于java不支持通过//192.168.19
- 前 言🍉 作者简介:半旧518,长跑型选手,立志坚持写10年博客,专注于java后端☕专栏简介:深入、全面、系统的介绍消息中间件🌰 文章简介
- 开发过程, 我们习惯把数据源配置, 项目常量, 日志配置等基础数据配置写到一个个单独的的文件中. 如jdbc.properties等各种.格
- 多线程的创建,方式一:继承于Thread类1.创建一个继承于Thread类的子类2.重写Thread类的run()--->将此线程执行
- Java是面向对象的编程语言,在我们开发Java应用的程序员的专业术语里,Java这个单词其实指的是Java开发工具,也就是JDK(Java
- 本文实例讲述了Java 反射机制原理与用法。分享给大家供大家参考,具体如下:反射反射,程序员的快乐!1、什么是反射?Java反射就是在运行状
- 导语在使用flutter 自带图片组件的过程中,大家有没有考虑过flutter是如何加载一张网络图片的? 以及对自带的图片组件我们可以做些什
- 本文实例为大家分享了Android实现控件拖动效果的具体代码,供大家参考,具体内容如下1.今天突然想到做个实现个控件拖动效果,就来试试,一查
- 下面通过代码给大家分享下依赖注入框架Autofac的使用,具体如下所示: Autofac是一款IOC框架,比较于其他的IOC框架,
- 我自己在使用的过程中遇见的问题,百度找了很久才找到合适的方法。报错如下:Emulator: emulator: ERROR: Unknown
- 本文实例为大家分享了java实现单词小游戏的具体代码,供大家参考,具体内容如下介绍公司最近有一个竞技场项目,里面有一个单词小游戏。游戏大概就
- 本文实例讲述了Android基于TextView实现的跑马灯效果。分享给大家供大家参考,具体如下:package sweet.venst.a
- SpringFramework5.0是自2013年12月版本4发布之后SpringFramework的第一个主发行版。SpringFrame
- 链表是一种复杂的数据结构,其数据之间的相互关系使链表分成三种:单链表、循环链表、双向链表,下面将逐一介绍。链表在数据结构中是基础
- 本文实例讲述了Android编程获取GPS数据的方法。分享给大家供大家参考,具体如下:GPS是Android系统中重要的组成部分,通过它可以