java 坐标体系与绘图

简介: java 坐标体系与绘图 内容分享。

目录

一、坐标体系

       1.像素 :

       2.坐标系 :

二、绘图

       1.机制 :

       2.实例 :

       3.原理 :

       4.常用绘图方法 :

               1° setColor(Color c) : 设置画笔颜色

                2° drawLine(int x1, int y1, int x2, int y2) : 画直线

                3° drawRect(int x, int y, int width, int height) : 画矩形边框

                4° fillRect(int x, int y, int width, int height) : 画填充矩形

                5° drawImage(image img, int x, int y, int width, int heght, ImageObserver observer) : 画图片

                6° setFont(Font font) : 设置画笔的字体

                7° drawString(String str, int x, int y) : 画字符串

三、事件处理机制

       1. 概述 :

       2.事件监听器接口 :


一、坐标体系

       1.像素 :

       在一个由数字序列表示的图像中的一个最小单位,称为像素。计算机在屏幕上显示的内容都是由屏幕上的每一个像素组成的。

      eg : 某一个计算机显示器的分辨率是1440 * 900,表示该显示器每一行由1440个像素构成,共900行;或者说每一列由900个像素构成,共1440列。而整个显示器屏幕共有1440 * 900 = 1296000个像素。

       注意 : 像素不是一个长度单位,因此直接比较像素没有意义;像素只是一个相对的表示图像的最小单位,如果该显示器是确定的,那么像素更像是一个密度单位

       2.坐标系 :

       在java的坐标系中,像素为基本单位坐标原点位于坐标系的左上角,向右水平延伸是x轴,代表水平方向;垂直x轴向下延伸即是y轴,代表竖直方向如下图所示 :

image.png

       其中,(x, y)表示水平方法x个像素,竖直方向y个像素


二、绘图

       1.机制 :

      画框——定义一个测试类去继承JFrame类,该测试类相当于一个画框。

       画板——定义一个类去继承JPanel类;该类的一个实例化就是一个画板

       画笔——paint方法中的形参(Graphics g)就是一个画🖊。(Graphics类中提供了大量绘图的方法。)paint方法中要存放绘图信息(即画什么)。

       2.实例 :

               以PaintOval类为演示类,画一个椭圆代码如下 :

packagecsdn.advanced.draw;
importjavax.swing.*;
importjava.awt.*;
publicclassPaintOvalextendsJFrame {
publicstaticvoidmain(String[] args) {
newPaintOval();    //实例化画框即可作画。    }
//1.定义画板(显式初始化为null)privateSketchpadsketchpad=null;
publicPaintOval() {
//2.初始化画板sketchpad=newSketchpad();
//3.将画板嵌入画框this.add(sketchpad);
//4.设置画板的大小(绘图区域)this.setSize(750, 500);
this.setVisible(true);  //true表示可见//5.设置点击“x”按钮即可退出程序this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}
classSketchpadextendsJPanel {
@Overridepublicvoidpaint(Graphicsg) {
super.paint(g); //注意 : 一定要使用带参数的父类的paint方法。//画一个特殊的椭圆(圆形)g.drawOval(200, 200, 400, 200);
/*drawOval方法的四个形参:1° x : 起笔处的x坐标2° y : 起笔处的y坐标3° width : 所要画的椭圆的宽度4° height : 所要画的椭圆的高度*/    }
}

image.gif

               运行结果 :

image.png

       3.原理 :

       Component类提供了两个与绘图相关的最重要的方法——

       paint(Graphics g) : 绘制组件的外观;

       repaint() : 刷新组件的外观;

      PS : paint方法会在以下情况被调用——

       组件第一次在屏幕上显示时,程序会自动地调用paint方法来绘制组件;

      窗口改变大小时,同上;

      当窗口被最小化,又重新显示时,同上;

       repaint方法被调用时,同上;

       4.常用绘图方法 :

               1° setColor(Color c) : 设置画笔颜色

               eg : (在上文PaintOval类代码的基础上更改),代码如下 :

packagecsdn.advanced.draw;
importjavax.swing.*;
importjava.awt.*;
publicclassPaintOvalextendsJFrame {
publicstaticvoidmain(String[] args) {
newPaintOval();
    }
privateSketchpadsketchpad=null;
publicPaintOval() {
sketchpad=newSketchpad();
this.add(sketchpad);
this.setSize(750, 500);
this.setVisible(true);  //true表示可见this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}
classSketchpadextendsJPanel {
@Overridepublicvoidpaint(Graphicsg) {
super.paint(g);
g.setColor(Color.CYAN);
g.drawOval(200, 200, 400, 200);
g.setColor(Color.cyan);
g.drawOval(50, 50, 200, 200);
    }
}

image.gif

               运行效果 :

image.png

                2° drawLine(int x1, int y1, int x2, int y2) : 画直线

               其中,(x1, y1)代表起笔处;(x2, y2)代表收笔处。    

               eg :代码如下 :

packagecsdn.advanced.draw;
importjavax.swing.*;
importjava.awt.*;
publicclassPaintOvalextendsJFrame {
publicstaticvoidmain(String[] args) {
newPaintOval();
    }
privateSketchpadsketchpad=null;
publicPaintOval() {
sketchpad=newSketchpad();
this.add(sketchpad);
this.setSize(750, 500);
this.setVisible(true);  //true表示可见this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}
classSketchpadextendsJPanel {
@Overridepublicvoidpaint(Graphicsg) {
super.paint(g);
g.setColor(Color.pink);
g.drawLine(100, 300, 500, 300);
g.setColor(Color.cyan);
g.drawLine(100, 150, 300, 150);
    }
}

image.gif

               运行效果 :  

image.png

                3° drawRect(int x, int y, int width, int height) : 画矩形边框

               其中,(x, y)代表起笔处;width代表矩形的宽度;height代表矩形的高度

               eg :代码如下 :

packagecsdn.advanced.draw;
importjavax.swing.*;
importjava.awt.*;
publicclassPaintOvalextendsJFrame {
publicstaticvoidmain(String[] args) {
newPaintOval();
    }
privateSketchpadsketchpad=null;
publicPaintOval() {
sketchpad=newSketchpad();
this.add(sketchpad);
this.setSize(750, 500);
this.setVisible(true);  //true表示可见this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}
classSketchpadextendsJPanel {
@Overridepublicvoidpaint(Graphicsg) {
super.paint(g);
g.setColor(Color.pink);
g.drawRect(50, 200, 500, 200);
g.setColor(Color.cyan);
g.drawRect(100, 100, 350, 150);
    }
}

image.gif

               运行效果 :

image.png

                4° fillRect(int x, int y, int width, int height) : 画填充矩形

               其中,(x, y)代表起笔处;width代表矩形的宽度;height代表矩形的高度

               eg :代码如下 :

packagecsdn.advanced.draw;
importjavax.swing.*;
importjava.awt.*;
publicclassPaintOvalextendsJFrame {
publicstaticvoidmain(String[] args) {
newPaintOval();
    }
privateSketchpadsketchpad=null;
publicPaintOval() {
sketchpad=newSketchpad();
this.add(sketchpad);
this.setSize(750, 500);
this.setVisible(true);  //true表示可见this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}
classSketchpadextendsJPanel {
@Overridepublicvoidpaint(Graphicsg) {
super.paint(g);
g.setColor(Color.pink);
g.fillRect(100, 200, 500, 200);
g.setColor(Color.cyan);
g.fillRect(100, 100, 350, 50);
    }
}

image.gif

               运行效果 :  

image.png

                5° drawImage(image img, int x, int y, int width, int heght, ImageObserver observer) : 画图片

               其中,img表示图片对象(固定格式),(x, y)仍然代表起笔处,width代表图片的宽度,height代表图片的高度,最后要传入一个this

               eg :代码如下 :

packagecsdn.advanced.draw;
importjavax.swing.*;
importjavax.tools.Tool;
importjava.awt.*;
publicclassPaintOvalextendsJFrame {
publicstaticvoidmain(String[] args) {
newPaintOval();
    }
privateSketchpadsketchpad=null;
publicPaintOval() {
sketchpad=newSketchpad();
this.add(sketchpad);
this.setSize(750, 500);
this.setVisible(true);  //true表示可见this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}
classSketchpadextendsJPanel {
@Overridepublicvoidpaint(Graphicsg) {
super.paint(g);
/*这里的文件需要传入的是路径。*/Imageimage=Toolkit.getDefaultToolkit().getImage("C:\\Users\\Five\\Desktop\\ty.jpg");
g.drawImage(image, 50, 50 , 300, 350, this);
    }
}

image.gif

               运行效果 :

image.png

                6° setFont(Font font) : 设置画笔的字体

               其中,可以更改字体的字体样式,字体粗细,字号等属性

                7° drawString(String str, int x, int y) : 画字符串

               其中,(x, y)代表的是字符串左下角的坐标(注意)

               eg :代码如下 :

packagecsdn.advanced.draw;
importjavax.swing.*;
importjava.awt.*;
publicclassPaintOvalextendsJFrame {
publicstaticvoidmain(String[] args) {
newPaintOval();
    }
privateSketchpadsketchpad=null;
publicPaintOval() {
sketchpad=newSketchpad();
this.add(sketchpad);
this.setSize(750, 500);
this.setVisible(true);  //true表示可见this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}
classSketchpadextendsJPanel {
@Overridepublicvoidpaint(Graphicsg) {
super.paint(g);
g.setColor(Color.cyan);
g.setFont(newFont("楷体", Font.BOLD, 50));   //BOLD表示加粗g.drawString("Cyan_RA9", 100, 233);
    }
}

image.gif

               运行效果 :

image.png

三、事件处理机制

       1. 概述 :

       java的事件处理采用“委派事件模型”。——当事件发生时,产生该事件的对象,并把相关信息传递给“事件的监听者”处理

       其中,

       事件源,就是指用户的操作,可以是一个按钮,也可以是一个窗口,即产生事件的对象;

       事件,就是承载事件源状态改变时生成的事件对象,比如键盘事件,窗口事件,鼠标事件等等,该对象保存着当前事件的很多信息,比如KeyEvent对象含有当前被按下键的Code值。java.awt.event包和javax.swing.event包下定义了各种事件类型。

       示意图如下 :

image.png

       2.事件监听器接口 :

        当事件源产生了一个事件,可以传送给事件监听器处理。此处的事件监听器——本质上就是一个实现了事件监听器接口的类。(eg : 画板类实现KeyListener接口)。

       一个类可以实现多个事件监听器接口。事件监听器接口有很多种,对应监听不同的事件。

目录
相关文章
|
5月前
|
XML Java 定位技术
详尽分享经纬坐标(BLH)数据创建.kml文件小工具设计Java版
详尽分享经纬坐标(BLH)数据创建.kml文件小工具设计Java版
58 0
|
6月前
|
Java
杨辉三角形(二维坐标基础题)——Java-二维数组版本
杨辉三角形(二维坐标基础题)——Java-二维数组版本
48 0
|
6月前
|
算法 Java 流计算
Java【算法分享 02】道格拉斯-普克 Douglas-Peucker 抽稀算法分析及15w个坐标点抽稀到3.7w耗时从360s+优化到365ms接近1000倍的速度提升(并行流+多线程+泛型)
Java【算法分享 02】道格拉斯-普克 Douglas-Peucker 抽稀算法分析及15w个坐标点抽稀到3.7w耗时从360s+优化到365ms接近1000倍的速度提升(并行流+多线程+泛型)
221 0
|
Java 定位技术 Maven
Java:计算地球上两个经纬度坐标之间的距离-geodesy和geotools实现
Java:计算地球上两个经纬度坐标之间的距离-geodesy和geotools实现
1557 0
|
算法 Java
java实现经纬度坐标是否在范围内的算法
java实现经纬度坐标是否在范围内的算法
java实现经纬度坐标是否在范围内的算法
|
Java 图形学 容器
java绘图技术基础
绘图原理: Component类提供了两个和绘图相关最重要的方法: paint(Graphics g)控制组件的外观 repaint()刷新组件的外观 那么通过上面的代码可以发现,我们并没有显示的调用paint方法,然而它似乎自己调用了,这是为什么呢?✨ 在以下情况下paint将会被调用:😁 组件第一次在屏幕显示的时候 窗口最大化和最小化 窗口大小发生变化 repaint方法被调用
159 0
java绘图技术基础
|
Java
Java初学者作业——编写 Java 程序,定义 Java 类 (Point) 用来表示坐标,坐标范围在(0,0)到(100,100)以内,并显示合法的坐标在控制台。
Java初学者作业——编写 Java 程序,定义 Java 类 (Point) 用来表示坐标,坐标范围在(0,0)到(100,100)以内,并显示合法的坐标在控制台。
527 0
Java初学者作业——编写 Java 程序,定义 Java 类 (Point) 用来表示坐标,坐标范围在(0,0)到(100,100)以内,并显示合法的坐标在控制台。
|
JavaScript Java
java、js实现百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系之间的转换
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gisdoer/article/details/82684617 java、js实现...
3131 0
|
Java
java实现判断一个经纬度坐标是否在一个多边形内(经自己亲测)
1.在高德地图上绘制的多边形;经纬度逗号分隔格式;上面是用来方便存坐标的对象;下面是方法测试;直接复制代码即可运行 public class Point { private Double x; private Double y; pu...
4554 0
|
Java Linux Windows
[工具04]java实现获取鼠标的坐标
本篇博客其实没什么难度可言,在这里分享给大家,是因为有时候我们需要这个工具,java作为跨平台语言的优势在这个软件就可以体现出来,不需修改就可以在windows、mac、linux上使用这个软件。 这个小工具主要是使用MouseInfo类实时获取鼠标的信息,然后再JDialog上显示出来。
1876 0