Java学习笔记(三)Java2D组件
一 概述
Java2D的一切都基于java.awt包中的Graphics2D类,它是Graphics的子类。
为了绘制图形,需要使用面板作为画布,例如使用JPanel作为画布,面板有一个paintCompnent()方法,每当窗口发生变化时,便会调用。该方法接收的对象是Graphics对象,要在方法内将其转化为Graphics2D再使用,一般用法为:
public void paintComponent(Graphics comp){
Graphics2D comp2D = (Graphics2D) comp;
}
图形的坐标系为横x竖y,左上为(0,0)
二 文本
使用函数drawString(<内容>,<x>,<y>);
①使用Font可以改变字体、字形、字号,一般用法为:
Font font = new Font("Arial",Font.BOLD+Font.ITALIC,24);
其中第二参数Font.BOLD为粗体,Font.ITALIC为斜体,要复用多个参数,采用加法。
设置完成后调用Graphics2D对象的setFont(font)方法设置字体。
②使用防锯齿改善显示质量
使用Graphics2D对象的setRenderingHint()方法,它有两个参数,可以简述为键、键值。
comp2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
③规范化显示位置
使用getFontMetrics(font)方法返回一个FontMetrics对象,利用该对象可以获取使用当前font显示的字符串的宽高,调用方法如下:
FontMetrics metrics = getFontMetrics(font);
metrics.stringWidth("abcde");//获取字符串宽度
metrics.charWidth('a');//获取字符宽度
metrics.getHeight();//获取字符串高度
综合运用代码如下:
package Learn;
import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;
public class GUI2D extends JFrame{
public GUI2D(String text, String fontName){
super("Show Font");
setSize(425,150);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
TextFramePanel sf = new TextFramePanel(text,fontName);
add(sf);
setVisible(true);
}
public static void main(String[] argv){
GUI2D text = new GUI2D("Test GUI Text","Arial");
}
public class TextFramePanel extends JPanel{
String text;
String fontName;
public TextFramePanel(String text, String fontName){
super();
this.text = text;
this.fontName = fontName;
}
public void paintComponent(Graphics comp){
super.paintComponents(comp);
Graphics2D comp2D = (Graphics2D)comp;
comp2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);;
Font font = new Font(fontName,Font.BOLD,24);
FontMetrics metrics = getFontMetrics(font);
comp2D.setFont(font);
int x = (getSize().width - metrics.stringWidth(text))/2;
int y = getSize().height / 2;
comp2D.drawString(text, x, y);
}
}
}
三 图形
(一)填充图案(梯度渐变)
填充图案可以作用于所有的Graphics2D组件,使用setPaint()方法来接收设定好的填充方案,常用的为Color或者GradientPaint,后者是一个梯度渐变,设置方法如下:
GradientPaint gp = new GradientPaint(x1,y1,color1,x2,y2,color2,false);
comp2D.setPaint(gp);
其中(x1,y1,color1)是渐变起点,(x2,y2,color2)是渐变中点,第三个参数代表是否周期性渐变。
(二)设置画笔
画笔决定了线宽、线段端点样式和线段连接样式,参数如下
BasicStroke(<线宽>,<端点样式>,<连接样式>);
线宽是float型,通常为1.0F
端点样式有CAP_BUTT(无端点)、CAP_ROUND(圆形端点)、CAP_SQUARE(方形,比无端点要长)
连接样式有JOIN_MITER(延伸)、JOIN_ROUND(圆弧链接)、JOIN_BEVEL(直线连接)
(三)绘制对象
①创建和设置对象,例如Line2D.Float ln;
②使用Graphics2D对象的draw()或者fill()方法,传入对象完成绘制。
draw用于绘制边框,fill用于填充。
例如线段的绘制过程为:
Line2D.Float ln = new Line2D.Float(x1,y1,x2,y2);
comp2D.draw(ln);
Java学习笔记(三)Java2D组件的更多相关文章
- Java学习笔记--Swing用户界面组件
很多与AWT类似. 事件处理参考:Java学习笔记--AWT事件处理 1.设计模式: 模型:存储内容视图:显示内容控制器:处理用户输入· 2. 文本输入常用组件 2.1 文本域: JLabel lab ...
- Java学习笔记三十一:Java 包(package)
Java 包(package) 一:包的作用: 如果我们在使用eclipse等工具创建Java工程的时候,经常会创建包,那么,这个包是什么呢. 为了更好地组织类,Java 提供了包机制,用于区别类名的 ...
- Java学习笔记三十:Java小项目之租车系统
Java小项目之租车系统 一:项目背景介绍: 根据所学知识,编写一个控制台版的“呱呱租车系统” 功能: 1.展示所有可租车辆: 2.选择车型.租车量: 3.展示租车清单,包含:总金额.总载货量以及其车 ...
- Java学习笔记三:Java的变量、常量、变量的类型及使用规则
Java的变量.常量.变量的类型及使用规则 每一种语言都有一些具有特殊用途的词,Java也不例外,它们被称为关键字.关键字对 Java 的编译器有着特殊的意义. 一:Java中的关键字: 注:Java ...
- Java学习笔记三.2
5.继承 //Java中所有对象都显式/隐式的继承子Object类 class fu{ fu(){ System.out.println("fu..."+getNum()); sh ...
- Java学习笔记三——数据类型
前言 Java是强类型(strongly typed)语言,强类型包含两方面的含义: 所有的变量必须先声明后使用: 指定类型的变量只能接受预支匹配的值. 这意味着每一个变量和表达式都有一个在编译时就确 ...
- Java学习笔记三---unable to launch
环境配置好后,在eclipse下编写HelloWorld程序: ①创建新工程 ②创建.java文件,命名为HelloWorld ③在源文件中添加main方法,代码如下: public void mai ...
- Java 学习笔记 (三) Java 日期类型
以下内容摘自: https://www.cnblogs.com/crazylqy/p/4172324.html import java.sql.Timestamp; import java.text ...
- Java学习笔记三:运算符
1.算术运算符: GitHub代码练习地址:https://github.com/Neo-ML/JavaPractice/blob/master/OperPrac01.java + - * / ...
- Java学习笔记三.3
9.异常处理:Java中的异常处理对象就是将以前的if语句进行的判断进行抽象化,并形成的一套错误处理体系.最顶端是Throwable,接着是Error,Exception,其中Exception又明显 ...
随机推荐
- 自写JQ控件-树状菜单控件[demo下载]
一个多月没有写博客了,最近也弄一个基于JQ的树状菜单控件,在此分享给大家.另外呢,通过这个例子分享一下怎么写JQ控件的. 事实上工作中,也是经常遇到的,有些时候自己想实现一些前端效果,用网上一些插件吧 ...
- hive数据类型及其数据转换
由于需要使用hive sql进行数据查询,同时涉及多个不同类型的字段的组合,看Hive sql的文档相关和资料才知道,hive是支持大部分基础数据类型之间的相互转换的. 那么,hive本身支持哪些数据 ...
- SQLite 语法(http://www.w3cschool.cc/sqlite/sqlite-syntax.html)
SQLite 语法 SQLite 是遵循一套独特的称为语法的规则和准则.本教程列出了所有基本的 SQLite 语法,向您提供了一个 SQLite 快速入门. 大小写敏感性 有个重要的点值得注意,SQL ...
- JAVA面向对象-----接口与类、接口之间的关系
接口与类.接口之间的关系 大家之前都知道类与类之间的关系继承,那么接口与类之间又是怎样子的关系呢? 接口与类之间是实现关系.非抽象类实现接口时,必须把接口里面的所有方法实现.类实现接口用关键字impl ...
- memcached实战系列(一)memcached安装
下载并安装Memcached服务器端 我用的是cenos6.5 64位系统. libevent是个程序库,它将Linux的epoll.BSD类操作系统的kqueue等事件处理功能封装成统一的接口,具有 ...
- 对LCS算法及其变种的初步研究
LCS的全称为Longest Common Subsequence,用于查找两个字符串中的最大公共子序列,这里需要注意区分子序列与子串,所谓子序列,指的是从前到后,可以跳跃元素筛选,而字串则必须连续筛 ...
- 小文本——Cookies
http协议的无状态性导致在需要会话的场景下寸步难行,例如一个网站为了方便用户,在一段时间内登录过改网站的浏览器客户端实现自动登录,为实现这种客户端与服务器之间的会话机制需要额外的一些标识,http头 ...
- J2EE进阶(二)从零开始之Struts2
J2EE进阶(二)从零开始之Struts2 以前自己总是听说什么SSH框架,不明觉厉.现在自己要重整旗鼓,开始系统性的学习SSH框架了.首先开始Struts2的学习.其实自己之前参与过Struts2项 ...
- Android学习之Animation(三)
今天观看了一个关于android动画的一些知识,就顺便记录下来,以备之后的学习和参考. 在XML文件中使用LayoutAnimationController 第一步: 在res/anim文件夹下创建一 ...
- 1022. Digital Library (30) -map -字符串处理
题目如下: A Digital Library contains millions of books, stored according to their titles, authors, key w ...