javaGUI学习9:AWT-字体

1、字体和字体度量
  • AWT中有两个类支持字体操作,这两个类是:Font和 FontMetrics o
  • 在Font类中,提供了一套基本的字体和字体类型。因为Java不受操作平台的约束,Helvs-tica、Times Roman等字体常被转换成本地平台支持的字体。
  • FontMetrics类支持和字体相关的度量,包括字体的高度、leading、ascnet、dscent、特定字符串的宽度等。
2、Font类
  • 字体是一个字符集。字体通过指定其逻辑字体名、字形和字体大小来实例化。
  • 对于低层的窗口系统,逻辑字体名被映射成一个本机字体。

JDK中支持的逻辑字体列表:

Dialog
SansSerif
Serif
Monospaced
Helvetica
TimesRoman
Courier
Dialoglnput
ZapfDingbats

构造字体时指定字形:

Font.BOLD
Font.ITALIC
Font.PLAIN

每个常数描绘Font类维护的字形integer中的一个比特。其中BOLD与ITALIC可以合并,PLAIN值为0,所以用 BOLD 或ITALIC与之合并的值是 BOLD或ITALIC 。

**字体大小:**用一个整数来确定。一点相当于1/72英寸。AWT中字体不保证所有大小都可以被绘制成系统字体。为了确定字体的精确大小,必须使用FontMetrics对象。

可以通过调用Toolkit.getFontList()获取支持的逻辑字体名列表

setFont(new Font(String 字体,int 风格,int 字号))
3、FontMetrics类

提供和字体相关的度量

3.1 AWT字体模式

AWT的字体模式和X Window系统中的字体模式很相似。在下图中,显示了在 AWT中怎样计算字体的高度、ascent 、descent 、leading 等。

  • ascent :字符向上超出基线的距离。descent :字符向下超出基线的距离。
  • leading: 上一行的descent和下一行的ascent之间的距离。
  • 字体高度:ascent、descent 、leading 的和。
  • FontMetrics 没有公共的构造器。调用下面的方法之一,可以得到FontMetrics的一个引用。
    在这里插入图片描述
    在这里插入图片描述

在上面所列出的方法中,第二个方法是用来获取和AWT构件相关的字体度量的最常用方法。该方法首先获取对构件的Graphics 的引用,然后调用Graphics.getFontMetrics ():

int bytesWidth(byte[] data, int off, int len) //返回显示此 Font指定字节数组的总提前宽度。  
int charsWidth(char[] data, int off, int len) //返回显示此 Font指定字符数组的总提前宽度。  
int charWidth(char ch) //返回此 Font指定字符的advance width。  
int charWidth(int codePoint) //返回此 Font指定字符的advance width。  
int getAscent() //确定此 FontMetrics对象描述的 Font的 字体上升 。  
int getDescent() //确定此 FontMetrics对象描述的 Font的 字体下降 。  
Font getFont() //获取 Font通过此描述 FontMetrics对象。  
FontRenderContext getFontRenderContext() //获取 FontRenderContext使用此 FontMetrics对象测量文本。  
int getHeight() //获取此字体中文本行的标准高度。  
int getLeading() //确定此 FontMetrics对象描述的 Font的 标准前导 。  
LineMetrics getLineMetrics(char[] chars, int beginIndex, int limit, Graphics context) //返回指定的Graphics上下文中指定字符数组的LineMetrics对象。  
LineMetrics getLineMetrics(String str, int beginIndex, int limit, Graphics context) //返回指定的Graphics上下文中指定的String的LineMetrics对象。  
LineMetrics getLineMetrics(String str, Graphics context) //返回指定的Graphics上下文中指定的String的LineMetrics对象。  
LineMetrics getLineMetrics(CharacterIterator ci, int beginIndex, int limit, Graphics context) //返回指定的Graphics上下文中指定的CharacterIterator的LineMetrics对象。  
int getMaxAdvance() //获取此 Font中任何字符的最大前进宽度。  
int getMaxAscent() //确定此 FontMetrics对象描述的 Font的最大上升。  
Rectangle2D getMaxCharBounds(Graphics context) //返回指定的 Graphics上下文中具有最大边界的字符的边界。  
int getMaxDecent() //已过时。 截至JDK 1.1.1版,由getMaxDescent()取代。  
int getMaxDescent() //确定此 FontMetrics对象描述的 Font的最大下降。  
Rectangle2D getStringBounds(char[] chars, int beginIndex, int limit, Graphics context) //返回指定的 Graphics上下文中指定的字符数组的边界。  
Rectangle2D getStringBounds(String str, int beginIndex, int limit, Graphics context) //返回指定的 Graphics上下文中指定的 String的边界。  
Rectangle2D getStringBounds(String str, Graphics context) //返回指定的 Graphics上下文中指定的 String的边界。  
Rectangle2D getStringBounds(CharacterIterator ci, int beginIndex, int limit, Graphics context) //返回指定的 Graphics上下文中指定的 CharacterIterator中索引的字符的边界。  
int[] getWidths() //获取 Font前256个字符的 Font 。  
boolean hasUniformLineMetrics() //检查 Font是否具有统一的线路指标。  
int stringWidth(String str) //返回在此 Font显示指定的 String的总提前宽度。  
String toString() //返回此 FontMetrics对象的值的表示形式为 String 。  
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java核心技术 卷Ⅰ:基础知识 【中文】 第1章概述Java与其他程序设计语言不同的性能。解释这种语言的设计初衷,以及在哪些方 面达到了预期的效果。然后,简要叙述Java诞生和发展的历史。 第2章详细地论述如何下载和安装JDK以及本书的程序示例。然后,通过编译和运行三个典 型的Java程序(一个控制台应用、一个图形应用、一个applet),指导读者使用简易的JDK、可 启用Java的文本编辑器以及一个Java IDE。 第3章开始讨论Java 语言。这一章涉及的基础知识有变量、循环以及简单的函数。对于C或 C++程序员来说,学习这一章的内容将会感觉一帆风顺,因为这些语言特性的语法本质上与C 语言相同。对于没有C语言程序设计背景,但使用过其他程序设计语言(Visual Basic)的程序 员,仔细地阅读这一章是非常必要的。 第4章介绍面向对象程序设计(Object-Oriented Programming, OOP)是当今程序设计的主 流,而Java 是完全面向对象的。本章将介绍面向对象两个基本成分中最重要的—封装,以及 Java 语言实现封装的机制,即类与方法。除了Java 语言规则之外,还对如何正确地进行OOP设 计给出了忠告。最后,介绍奇妙的Javadoc 工具,它将代码注释转换为超链接的网页。熟悉 C++的程序员可以快速地浏览这一章,而没有面向对象程序设计背景的程序员,应在进一步学 习Java之前花一些时间了解OOP的有关概念。 第5章介绍类与封装仅仅是OOP中的一部分,本章将介绍另一部分—继承。继承使程序员 可以使用现有的类,并根据需要进行修改。这是Java程序设计中的基础。Java中的继承机制与 C++的继承机制十分相似。C++程序员只需关注两种语言的不同之处即可。 第6章展示如何使用Java的接口。接口可以让你的理解超越第5章的简单继承模型。掌握接 口的使用将可以获得Java完全的面向对象程序设计的能力。本章还将介绍Java的一个有用的技 术特性—内部类。内部类可以使代码更清晰、更简洁。 第7章开始细致地讨论应用程序设计。每一个Java程序员都应该了解一些图形用户界面程序 设计的知识,本卷中包含了其中的基本内容部分。本章将展示如何制作窗口、如何在窗口中绘 图、如何用几何图形作画、如何用多种字体格式化文本以及如何显示图像。 第8章详细讨论AWT(Abstract Window Toolkit )的事件模型。我们将介绍如何编写代码来响 V 应鼠标点击或敲击键盘等事件。同时,还将介绍如何处理基本的GUI元素,比如:按钮和面板。 第9章详细讨论Swing GUI 工具箱。Swing工具箱允许建立一个跨平台的图形用户界面。本 章将介绍如何建立各种各样的按钮、文本组件、边界、滑块、列表框、菜单以及对话框等等。 一些更高级的组件将在卷II中讨论。 第10章阐述如何部署自己编写的应用程序或applet。在这里将描述如何将应用程序打包到 JAR 文件中,以及如何使用Java的Web Start 机制在Internet上发布应用程序。最后,将解释 Java程部署之后如何存储、检索配置信息。 第11章讨论异常处理,即Java的健壮机制,它用于处理调试好的程序可能出现的意外的情 况。异常提供了一种将正常的处理代码与错误处理代码分开的有效手段。当然,即使程序包含 处理所有异常情况的功能,依然有可能无法按照预计的方式工作。这一章的后半部分,将给出 大量的实用调试技巧。最后,讲述如何使用各种工具完成一个示例程序。 第12章概要介绍泛型程序设计,这是Java SE5.0的一项重要改进。泛型程序设计使得程序 拥有更好的可阅读性和安全性。在这里,将展示如何使用强类型机制,而舍弃不安全的强制类 型转换,以及如何处理与旧版本Java兼容而带来的复杂问题。 第13章介绍Java平台的集合框架。当需要将大量对象收集到一起,并在过后要对它们进行 检索时,可能会想要使用集合,这是目前最为合适的,它取代了将这些元素放置在数组中。本 章将介绍如何使用预先建立好的标准集合。 第14章是本书的最后一章。在这章中,将介绍多线程,这是一种可以让程序任务并行执行 的特性(线程是程序中的控制流),并阐述如何建立线程、如何处理线程的同步问题。从Java SE 5.0开始,多线程有了很大的改进,本章将介绍所有这些新的机制
class ZiMupanel extends JFrame { public ZiMupanel() { Container con = this.getContentPane(); // 设置窗口名称 this.setTitle("滚动字幕"); // 设置布局管理器为 null ,方便 面板定位,一般使用null 布局时,将窗口设置不可改变大小 this.setLayout(null); // 设置窗口位置和大小 this.setBounds(300, 300, 460, 330); // 设置窗口可见 this.setVisible(true); // 设置不可改变大小 this.setResizable(false); // 设置当点击窗口的关闭按钮时退出 // 设置此窗体关闭,滚动面板不关闭 this.setDefaultCloseOperation(DISPOSE_ON_CLOSE); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Panelfont1 p1 = new Panelfont1(); con.add(p1); p1.setBounds(15, 15, 175, 60); Panelfont2 p2 = new Panelfont2(); con.add(p2); p2.setBounds(195, 15, 250, 60); Panelneizi p3 = new Panelneizi(); con.add(p3); p3.setBounds(15, 80, 175, 80); Paneldirection p4 = new Paneldirection(); con.add(p4); p4.setBounds(195, 80, 250, 80); Panel5 p5 = new Panel5(); con.add(p5); p5.setBounds(15, 155, 430, 70); Panel6 p6 = new Panel6(); con.add(p6); p6.setBounds(15, 220, 430, 70); } } class Panelfont1 extends JPanel implements ActionListener{ public Panelfont1() { this.setBorder(BorderFactory.createTitledBorder("滚动字幕的文字大小控制"));//设置 面板边框 this.setLayout(new GridLayout(1, 2)); bigfont = new JRadioButton("大字体", false); smallfont = new JRadioButton("小字体", true); bigfont.addActionListener(this); smallfont.addActionListener(this); ButtonGroup sexRadioButtonGroup = new ButtonGroup();// 创建一个选按钮组 sexRadioButtonGroup.add(bigfont);// 将单选按钮对象添加到按钮组中 sexRadioButtonGroup.add(smallfont);// 将单选按钮对象添加到按钮组中 //Enumeration elements = sexRadioButtonGroup.getElements();// 遍历按钮组中的所有按钮 this.add(bigfont); this.add(smallfont); } public void actionPerformed(ActionEvent e) { if(bigfont.isSelected()){ fontSize = 50; }else { fontSize = 36; } Font font = new Font(fontName,Font.BOLD,fontSize);

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值