一  概述

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组件的更多相关文章

  1. Java学习笔记--Swing用户界面组件

    很多与AWT类似. 事件处理参考:Java学习笔记--AWT事件处理 1.设计模式: 模型:存储内容视图:显示内容控制器:处理用户输入· 2. 文本输入常用组件 2.1 文本域: JLabel lab ...

  2. Java学习笔记三十一:Java 包(package)

    Java 包(package) 一:包的作用: 如果我们在使用eclipse等工具创建Java工程的时候,经常会创建包,那么,这个包是什么呢. 为了更好地组织类,Java 提供了包机制,用于区别类名的 ...

  3. Java学习笔记三十:Java小项目之租车系统

    Java小项目之租车系统 一:项目背景介绍: 根据所学知识,编写一个控制台版的“呱呱租车系统” 功能: 1.展示所有可租车辆: 2.选择车型.租车量: 3.展示租车清单,包含:总金额.总载货量以及其车 ...

  4. Java学习笔记三:Java的变量、常量、变量的类型及使用规则

    Java的变量.常量.变量的类型及使用规则 每一种语言都有一些具有特殊用途的词,Java也不例外,它们被称为关键字.关键字对 Java 的编译器有着特殊的意义. 一:Java中的关键字: 注:Java ...

  5. Java学习笔记三.2

    5.继承 //Java中所有对象都显式/隐式的继承子Object类 class fu{ fu(){ System.out.println("fu..."+getNum()); sh ...

  6. Java学习笔记三——数据类型

    前言 Java是强类型(strongly typed)语言,强类型包含两方面的含义: 所有的变量必须先声明后使用: 指定类型的变量只能接受预支匹配的值. 这意味着每一个变量和表达式都有一个在编译时就确 ...

  7. Java学习笔记三---unable to launch

    环境配置好后,在eclipse下编写HelloWorld程序: ①创建新工程 ②创建.java文件,命名为HelloWorld ③在源文件中添加main方法,代码如下: public void mai ...

  8. Java 学习笔记 (三) Java 日期类型

    以下内容摘自:  https://www.cnblogs.com/crazylqy/p/4172324.html import java.sql.Timestamp; import java.text ...

  9. Java学习笔记三:运算符

    1.算术运算符: GitHub代码练习地址:https://github.com/Neo-ML/JavaPractice/blob/master/OperPrac01.java +  -  *  /  ...

  10. Java学习笔记三.3

    9.异常处理:Java中的异常处理对象就是将以前的if语句进行的判断进行抽象化,并形成的一套错误处理体系.最顶端是Throwable,接着是Error,Exception,其中Exception又明显 ...

随机推荐

  1. Bootstrap3 排版-对齐

    通过文本对齐类,可以简单方便的将文字重新对齐. Left aligned text. Center aligned text. Right aligned text. Justified text. ...

  2. 排查Full GC

    我们的Java应用因频繁FULL GC导致性能降低很多,经过多人的定位也没有结论,于是我自主请命,经过一天的研究终于搞定了,现把经验与大家共享,相关的gc日志如下: 4.758: [Full GC [ ...

  3. Ajax原理学习

    一.AJAX 简介 AJAX即"Asynchronous Javascript And XML"(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术. A ...

  4. 计算机网络之远程终端协议TELNET

    TELNET 是一个简单的远程终端协议.用户用 TELNET 就可在其所在地通过 TCP 连接注册(即登录)到远地的另一个主机上(使用主机名或 IP 地址). TELNET 能将用户的击键传到远地主机 ...

  5. 如何在控制台切换Xcode的版本

    打开控制台,输入 xcode-select -p 你可以看到当前Xcode所使用的版本路径,比如本猫的输出为: /Applications/Xcode-beta.app/Contents/Develo ...

  6. Python 妙用heapq

    小顶堆求TopK大 大顶堆求BtmK小 题外话 Python有一个内置的模块,heapq标准的封装了最小堆的算法实现.下面看两个不错的应用. 小顶堆(求TopK大) 话说需求是这样的: 定长的序列,求 ...

  7. Java异常封装(自己定义错误码和描述,附源码)

    真正工作了才发现,Java里面的异常在真正工作中使用还是十分普遍的.什么时候该抛出什么异常,这个是必须知道的. 当然真正工作里面主动抛出的异常都是经过分装过的,自己可以定义错误码和异常描述. 下面小宝 ...

  8. syslog(),closelog()与openlog()--日志操作函数

    在典型的 LINUX 安装中,/var/log/messages 包含所有的系统消息,/var/log/mail 包含来自邮件系统的其它日志消息,/var/log/debug 可能包含调试消息.根据你 ...

  9. CoreAnimation动画结构变量

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交 ...

  10. Xcode7.3.1中SKAudioNode在Scene转换后无声的问题

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 在新的Xcode中之前可以正常运行的SKAudioNode代码 ...