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
猜你喜欢
- 本文实例讲述了Java访问WebService返回XML数据的方法。分享给大家供大家参考。具体如下:import java.io.IOExc
- 多数据源配置首先是配置文件这里采用yml配置文件,其他类型配置文件同理我配置了两个数据源,一个名字叫ds1数据源,一个名字叫ds2数据源,如
- 在Java移动文件夹及其所有子文件与子文件夹可以有如下的一段简单的方法来说明:public static void moveFolder(S
- Java及数据库对日期进行格式化Java对日期进行格式化可使用java.text.SimpleDateFormat示例package com
- 微服务feign调用添加token1.一般情况是这么配置的具体的怎么调用就不说了 如下配置,就可以在请求头中添加需要的请求头信息。packa
- Java Set集合的遍历及实现类的比较Java中Set集合是一个不包含重复元素的Collection,首先我们先看看遍历方法package
- 本文实例讲述了Java实现接口的枚举类。分享给大家供大家参考,具体如下:一 点睛枚举类也可以实现一个或多个接口。与普通类实现一个或多个接口完
- 1. pom.xml文件配置<?xml version="1.0" encoding="UTF-8&qu
- 一、方法这里我们用两种方法来实现跑马灯效果,虽然实质上是一种实质就是:1、TextView调出跑马灯效果2、TextView获取焦点&nbs
- using System; using System.Collections.Generic; using System.Text; usi
- MyBatis-Plus不使用数据库默认值的问题有时候我们在设计数据表时希望某些字段使用默认值,比如create_time、和update_
- 采用继承Thead类实现多线程:优势:编写简单,如果需要访问当前线程,只需使用this即可,无需使用Thead.currentThread(
- 最近在配置OpenCV的时候,由于使用的是VS2019,结果找不到Microsoft.Cpp.X64.user这个文件。导致每次新建项目都得
- 本文实例为大家分享了C语言自定义扫雷游戏的具体代码,供大家参考,具体内容如下实现过程对于用C语言实现扫雷游戏得实现,可将游戏过程分为两个板块
- 1. 在原有工程目录右键-> new ->Module->:2. 选择library:3. 一路next,最后finish
- 一、前言正常情况下classloader只能找到jar里面当前目录或者文件类里面的*.class文件。为了能够加载嵌套jar里面的资源之前都
- 使用JAVA工程管理越来越多的jar包,担心导错了,多导了,漏导了怎么办?换一个IDE项目后项目会不会出一堆BUG,看的头皮发麻?自己写的代
- 前言在我们平时使用图形化界面的时候,会发现来建立一个文件夹或者一个文档的时候很简单,只需要在桌面单击鼠标右键就可以了。但是,在我们写项目的时
- 目标效果: 点击动画按钮之后每张牌各自旋转 散开到屏幕上半部分的任意位置之后回到初始位置 比较像LOL男刀的技能动画 : )1: 创建卡牌对
- File类简介package com.file;import java.io.File;import java.io.IOException