【Java】【绘图】
绘图原理(1)
Component类提供了两个和绘图相关最重要的⽅法:
1、 paint(Graphics g)绘制组件的外观
2、 repaint()刷新组件的外观
当组件第⼀次在屏幕显示的时候,程序会⾃动的调paint()来绘制组件
绘图原理(2)
在以下情况paint()将会被调⽤:
1、窗⼝最小化,再最大化
2、窗⼝的大小发⽣变化
3、 repaint函数被调
- import javax.swing.*;
import java.awt.*;
/*
栗子 Java绘图基础
*/- //定义一个MyPanel(我自己的面板是用于绘图和显示绘图的区域)
class MyPanel extends JPanel{
//重写父类JPanel的paint方法
public void paint(Graphics g){
//1. 调用父类函数,完成初始化任务
super.paint(g);//super.paint(g)这句话不能少
System.out.println("Paint被调用");
//2. paint调用,先画一个圆
g.drawOval(10,10,30,30);- }
}
public class Test_Graphics extends JFrame {
MyPanel mp = null;- public Test_Graphics(){
mp = new MyPanel();
this.add(mp);
this.setSize(400,300);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
public static void main(String[] args){
Test_Graphics th = new Test_Graphics();
}- }
- import javax.swing.*;
import java.awt.*;
/*
栗子 Graphics类你可以理解就是画笔,为我们提供了各种绘制图形的⽅法: [多看jdk帮助⽂档]
1、画直线 drawLine(int x1,int y1,int x2,int y2);
2、画矩形边框 drawRect(int x,int y,int width,int height);
3、画椭圆边框 drawOval(int x,int y,int width,int height);
4、填充矩形 fillRect(int x,int y,int width,int height);
5、填充椭圆 fillOval(int x,int y,int width,int height);
6、画图⽚ drawImage(Image img.int x,int y,..);
7、画字符串 drawString(String str,int x,int y);
8、设置画笔的字体 setFont(Font font);
9、设置画笔的颜⾊ setColor(Color c);
*/- //定义一个MyPanel(我自己的面板是用于绘图和显示绘图的区域)
class MyPanel extends JPanel{
//重写父类JPanel的paint方法
public void paint(Graphics g){
//1. 调用父类函数,完成初始化任务
super.paint(g);//super.paint(g)这句话不能少
//画直线
g.drawLine(10,10,40,10);
//矩形边框
g.drawRect(50,50,40,40);
//椭圆边框
g.drawOval(100,100,60,60);
//填充矩形
g.setColor(Color.blue);
g.fillRect(10,150,70,70);
//填充椭圆
g.setColor(Color.red);
g.fillOval(200,50,80,80);
}
}
public class Test_Graphics extends JFrame {
MyPanel mp = null;- public Test_Graphics(){
mp = new MyPanel();
this.add(mp);
this.setSize(400,300);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
public static void main(String[] args){
Test_Graphics th = new Test_Graphics();
}- }
- import javax.swing.*;
import java.awt.*;
/*
栗子 画图片 画字
*/- //定义一个MyPanel(我自己的面板是用于绘图和显示绘图的区域)
class MyPanel extends JPanel{
//重写父类JPanel的paint方法
public void paint(Graphics g){
//1. 调用父类函数,完成初始化任务
super.paint(g);//super.paint(g)这句话不能少
//在画板上画图片
System.out.println(getClass());
Image im = Toolkit.getDefaultToolkit().getImage("D:\\zidonghua\\java_test_one\\images\\dog.jpg");
//下面的方法就不行,因为这里的getClass()的路径是编译后的路径,即使从target开始往下找的路径
//Image im = Toolkit.getDefaultToolkit().getImage(getClass().getResource("D:\\zidonghua\\java_test_one\\images\\dog.jpg"));
//实现
g.drawImage(im,0,0,300,200,this);
//画字
g.setColor(Color.red);
g.setFont(new Font("黑体",Font.BOLD,40));
g.drawString("祖国万岁",100,100);
//画弧形
g.drawArc(100,100,120,200,-50,-100);
}
}
public class Test_Graphics extends JFrame {
MyPanel mp = null;- public Test_Graphics(){
mp = new MyPanel();
System.out.println(" " + getClass());
this.add(mp);
this.setSize(400,300);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
public static void main(String[] args){
Test_Graphics th = new Test_Graphics();
}- }
【备注】java中Class.getResource用法(用于配置文件的读取)
用JAVA获取文件,听似简单,但对于很多像我这样的新人来说,还是掌握颇浅,用起来感觉颇深,大常最经常用的,就是用JAVA的File类,如要取得c:/test.txt文件,就会这样用File file = new File("c:/test.txt");这样用有什么问题,相信大家都知道,就是路径硬编码,对于JAVA精神来说,应用应该一次成型,到处可用,并且从现实应用来讲,最终生成的应用也会部署到Windows外的操作系统中,对于linux来说,在应用中用了c:/这样的字样,就是失败,所以,我们应该尽量避免使用硬编码,即直接使用绝对路径。
在Servlet应用中,有一个getRealPath(String str)的方法,这个方法尽管也可以动态地获得文件的路径,不秘直接手写绝对路径,但这也是一个不被建议使用的方法,那么,我们有什么方法可以更好地获得文件呢?
那就是Class.getResource()与Class.getResourceAsStream()方法,但很多人还是不太懂它的用法,因为很多人(比如不久前的我)都不知道应该传怎么样的参数给它,当然,有些人己经用得如火纯青,这些人是不需要照顾的,在此仅给不会或者还不是很熟的人解释一点点
比如我们有以下目录
|--project
|--src
|--javaapplication
|--Test.java
|--file1.txt
|--file2.txt
|--build
|--javaapplication
|--Test.class
|--file3.txt
|--file4.txt
在上面的目录中,有一个src目录,这是JAVA源文件的目录,有一个build目录,这是JAVA编译后文件(.class文件等)的存放目录
那么,我们在Test类中应该如何分别获得
file1.txt file2.txt file3.txt file4.txt这四个文件呢?
首先讲file3.txt与file4.txt
file3.txt:
方法一:File file3 = new File(Test.class.getResource("file3.txt").getFile());
方法二:File file3 = new File(Test.class.getResource("/javaapplication/file3.txt").getFile());
方法三:File file3 = new File(Test.class.getClassLoader().getResource("javaapplication/file3.txt").getFile());
file4.txt:
方法一:File file4 = new File(Test.class.getResource("/file4.txt").getFile());
方法二:File file4 = new File(Test.class.getClassLoader().getResource("file4.txt").getFile());
很好,我们可以有多种方法选择,但是file1与file2文件呢?如何获得?
答案是,你只能写上它们的绝对路径,不能像file3与file4一样用class.getResource()这种方法获得,它们的获取方法如下
假如整个project目录放在c:/下,那么file1与file2的获取方法分别为
file1.txt
方法一:File file1 = new File("c:/project/src/javaapplication/file1.txt");
方法二:。。。没有
file2.txt
方法一:File file2 = new File("c:/project/src/file2.txt");
方法二:。。。也没有
总结一下,就是你想获得文件,你得从最终生成的.class文件为着手点,不要以.java文件的路径为出发点,因为真正使用的就是.class,不会拿个.java文件就使用,因为java是编译型语言嘛
至于getResouce()方法的参数,你以class为出发点,再结合相对路径的概念,就可以准确地定位资源文件了,至于它的根目录嘛,你用不同的IDE build出来是不同的位置下的,不过都是以顶层package作为根目录,比如在Web应用中,有一个WEB-INF的目录,WEB-INF目录里面除了web.xml文件外,还有一个classes目录,没错了,它就是你这个WEB应用的package的顶层目录,也是所有.class的根目录“/”,假如clasaes目录下面有一个file.txt文件,它的相对路径就是"/file.txt",如果相对路径不是以"/"开头,那么它就是相对于.class的路径。。
还有一个getResourceAsStream()方法,参数是与getResouce()方法是一样的,它相当于你用getResource()取得File文件后,再new InputStream(file)一样的结果
Windows绝对路径:
在windows或者Linux获取配置文件如:.properties文件时
使用Class.getResource或者ClassLoader.getResource获取绝对路径classpath时返回的值如下不同
1
|
String basepath=Thread.currentThread().getContextClassLoader().getResource( "" ).toString(); |
Windows输出
1
|
basepath=file:/D:/Workspaces/edu.bizoss.com/WebRoot/WEB-INF/classes/ |
Linux输出
1
|
basepath=file:/Workspaces/edu.bizoss.com/WebRoot/WEB-INF/classes/ |
因此获取绝对路径的截取的也就不同
1
2
3
4
5
|
if (System.getProperty( "file.separator" ). equals ( "\\" )){ return basepath.substring(6,basepath.length()); } else { return basepath.substring(5,basepath.length()); } |
【Java】【绘图】的更多相关文章
- java基础 绘图技术.坦克大战 之java绘图坐标体系(一)
坐标体系介绍 下图说明了java坐标体系.坐标原点位于左上角,以像素为单位,像素是计算机屏幕上最小的显示单位.在java的坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素:第二个 ...
- java 绘图
java 绘图 圆形.线条.矩形.填充 插入图片 文字 //绘图 import java.awt.*; import javax.swing.*; public class Index extends ...
- java绘图原理------在窗口界面(或面板上)画出一张或多张图片问题解决方法
/** *@author blovedr * 功能: java绘图原理------在窗口界面(或面板上)画出一张或多张图片问题解决方法 * 日期: 2018年4月28日 16:20 * 注释: ...
- java绘图(基于Graphics2D)
1.绘图基本操作 请参考下面基础示例: int width = 200, height = 250; //创建图片对象 BufferedImage image = new BufferedImage( ...
- Java Web-servlet、HTTP in servlet和捎带的Java绘图学习
Java Web-servlet.HTTP in servlet和捎带的Java绘图学习 server applet:运行在服务器端的小程序 动态项目的动态内容的java类依赖于服务器才能运行,由to ...
- Java绘图基础
<零基础学Java> Java绘图基础 绘图是高级程序设计中非常重要的技术,例如,应用程序需要绘制闪屏图像.背景图像.组件外观Web程序可以绘制统计图.数据库存储的图像资源等. Graph ...
- java基础 绘图技术.坦克大战 之java绘图坐标体系(二)
功能:在坐标系上绘制坦克 /* * 功能:坦克游戏的1.0 * 1. 画出坦克 * */ package com.tank; import javax.swing.*; import java.awt ...
- 【java版坦克大战---准备篇】 java 绘图
要写坦克大战当然要先画出坦克.java画图是基础. package com.game; import java.awt.*; import javax.swing.*; public class Pr ...
- java绘图合并图像AlphaComposite模式测试
package com.hdwang.test; import javax.swing.*; import javax.swing.event.ChangeEvent; import javax.sw ...
- java绘图drawString位置的确定
根据api,很容易知道使用方式如下: 指定字符串和坐标即可. 但是简单认为字符串的起始位置就是左上顶点就错了,这样画起来每次的位置都不对,字体的大小不同,位置偏差很大.仔细看api注释后发现,y坐标是 ...
随机推荐
- Linux Centos下查看cpu、磁盘、内存使用情况,关闭MySQL日志
Linux Centos下查看cpu.磁盘.内存使用情况,关闭MySQL日志 lsblk 查看分区和磁盘df -h 查看空间使用情况fdisk -l 分区工具查看分区信息cfdisk /dev/sda ...
- javanio1----传统io
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import ...
- linux 文件压缩与解压缩
- Java学习路线教程之JDBC基本操作
为了帮助大家熟练应用JDBC编程,接下来,在本节将通过一个综合案例来讲解JDBC的基本操作,确保大家能够深刻理解JDBC的增.删.改.查,灵活利用JDBC完成对数据库的各项操作. 1. 创建一个Jav ...
- 使用tableau去将存入mysql都地区点击率进行了展示 感觉很好用
1.连接数据源很多选项:hive mysql Oracle 等所有数据库 2.写上hive2的那个客户端连接,下边会显示出让我装连接的驱动 ,所有jdbc都需要这样 点进去找到windows的下载一键 ...
- Django框架----权限管理(设计分析以及具体细节)
说起权限我们大家都知道,不一样的角色会有不一样的权限.比如就像学生管理系统一样,管理员,老师,学生之间的权限都是不一样的,那么展示的页面也是不一样的.所以,我们现在来看看具体操作. 目标:生成一个独立 ...
- 双屏互动h5
情侣H5:https://www.25xt.com/allcode/10837.html 双屏互动:https://www.digitaling.com/articles/18180.html
- 10大H5前端框架 ......>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
作为一名做为在前端死缠烂打6年并且懒到不行的攻城士,这几年我还是阅过很多同门从知名到很知名的各种前端框架,本来想拿15-20个框架来分享一下,但在跟几个前辈讨教写文章的技巧时果断被无情的打击了,所以这 ...
- 一、初始PS软件
PS的介绍 Adope Photoshop,简称“PS”,是由Adope Systems开发和发行的图像处理软件. Photoshop主要处理以像素所构成的数字图像,使用其众多的编修与绘图工具,可以 ...
- PyCharm 安装及破解方法
PyCharm 安装及破解方法 一.安装 首先要下载Pycharm这个软件,可以在官网下载进行下载. 下载完软件之后,双击安装文件即可进行安装,双击后出现下图所示的提示,点击Next即可. 然后会出现 ...