用三个Java类设置文本显示

http://passmatlab.bokee.com/3779555.html

用三个Java类设置文本显示

关键词java显示,字体大小,显示位                                          

回顾
为了使用Graphics类的text方法,理解Graphics类所扮演的角色是必需的。这节概述Graphics类的功能和操作。
Graphics类在AWT中扮演了两个不同但有联系的角色。首先, 它维维护着由影响图形操作结果的所有信息组成的图形环境,这包括显示的颜色、字体、位置和尺寸,字体,并且地点和载剪矩形的尺寸 (在些区域的图形能被绘制)。更重要的是, 图形环境定义了下面将讨论到的图形操作的目的地 ( 目的地包括部件和图象 ) 。
除了图形环境这一角色,Graphics类还提供绘制简单几何图形、显示文本及将图象放入图形目的地的方法,在一个部件或图象上的所有与图形有关的操作都通过这些方法产生。
为了绘制,程序要求有一个有效的图形环境( 由Graphics类的一个实例表示)。因为Graphics类是一个抽象的基类,它不能直接被实例化。一个具体的实例被一个部件创建,并且然后作为一个参数传递给程序到一个部件的update()和paint()方法。这两个方法作为AWT内周期绘制的一部分被调用。
Graphics类与Font类和FontMetrics类一起提供必要的工具在一幅图象或部件内绘制文本。让我们开始用Graphics类绘制文本的练习。
Graphics类
Graphics类提供了三个在部件和图象中绘制文本的方法。
void drawString(String str, int x, int y)
drawstring()方法用一个包含将要被显示文本的字符串实例以及两个指定文本开始坐标的整型值作为参数。
public void paint(Graphics g)
{
g.drawString("abc", 25, 25);
}
上面列的代码显示了在paint()方法内使用drawString()方法。这个范例代码在含paint()方法的部件中显示字符“abc”,x和y坐标指明文本框左下角位置。图1显示了将此代码放在适当的AWT组件对象中显示的结果。

 

图1:一个drawString()示范


void drawChars(char [] data, int offset, int length, int x, int y)
drawChars()方法有以下参数:一个将要被显示成文本的字符数组,一个指定将从第几个字符开始显示的整型值,一个指点将要显示几个字符的整型值,以及将从哪个位置显示的两个整型值。
public void paint(Graphics g)
{
   char [] rgc = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j' };

   g.drawChars(rgc, 0, 5, 25, 25);
   g.drawChars(rgc, 5, 5, 25, 50);
}
以上代码是一个在paint()方法中引用drawChars()的例子,字符数组被显示在两个部分。第一次,参数指定从第一个字符开始显示,并显示5个字符;第二次显示剩下的5个字符,并和第一次显示的结果拉开25个像素,图2显示了代码运行结果。

 

图2:一个drawChars()示范



void drawBytes(byte [] data, int offset, int length, int x, int y)
象下面显示的一样,drawBytes()方法带有一个包含要显示文本的byte数组,一个指明数组开始偏移量的整型值,一个指明byte长度的整型值和两个指明文本开始坐标的整型值。
public void paint(Graphics g)
{
byte [] rgb = { 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't' };
g.drawBytes(rgb, 0, 5, 25, 25);
g.drawBytes(rgb, 5, 5, 25, 50);
}
上面的代码显示了在一个paint()方法内使用的drawBytes()方法。图表3显示了如果这段代码放入一个合适的AWT对象中将出现的结果。

 

图表3:一个drawBytes()范例


Unicode 支持
Java 被极力赞扬的原因之一是它可经由Unicode支持国际通用的脚本。不幸的是由Java 程序语言1.0版本提供的Java类库并不完全支持这一点。然而, 似乎转机就在眼前,初期的国际化API可从SunSoft得到。JDK 1.0仅限于显示Unicode 的拉丁文-1子集中的字符。这种限制在JDK 1.1被去掉。现在Java程序能够显示任何一种用主机字体修饰的Unicode字符。Java提供少数预定义“虚拟”字体命名并映射到主机上的真实字体。在JDK 1.0中,每个Java字体名称严密地与一主机字体映射。在JDK 1.1中,一个Java字体名称能印射到一系列主机字体。可选择将主机字体系列用Unicode 字符集代替。
文本的放置
因为文本只是AWT的另外一种形式,一行文本可以被放在任何地方——甚至在另一行文本的上方。随意放置文本并不能令视觉愉悦,为了帮助程序员创建具有审美效果的文本,一个字体定义就包括行与字符的放置指南。这些指南可以帮助创建美妙的输出效果。
图4包含了一行文本并标出了我们准备讨论的一些属性。

 

图4:一行文本


在前一节方法中的y坐标参数指定了文本行的baseline位置。baseline是一行文本的大部分字符都在其上面的那一根线(除那些下行字母例外如“g”和“y”)。baseline并不是字体的一个特征但确是所有与其涉及的其它字符的参考点。
Ascent是从baseline到字体中部分字符顶部的距离,典型的是字体中大写字母和象“f”及“h”字符的高度。这仅是一个大概原则,然而,字体中的一些字符可能实际上会延伸到这个距离的上面。
Descent是从baseline到有下行字母的字体中字符底部的距离——象“p”、“q”和“y”等字符。这只是一个大概原则,在一种字体中的某些字符可能实际会延伸到这距离的下面。
Leading是一行文本的descent与ascent间的空间距离。一行文本的高度包括这个延伸空间部分。
另外整体控制字体的一个特征就是,在一种字体的每个字符中都有advance。advance指定字符的开始处与它右边字符的开始处间隔多少象素;简言之,它是一个字符的宽度。在一种字体中的一些字符可能实际上超过这个距离。
通过将一行文本的所有字符的宽度加起来可以计算整行文本的长度,下面将介绍的FontMetrics类提供了与此有关的方法。
FontMetrics类
FontMetrics类提供了一个简单的方法得到上面讨论过的属性,下面就是getFontMetrics方法:
public void paint(Graphics g)
{
FontMetrics fm = g.getFontMetrics();
.
.
.
}
上面的代码示范了如何得到字体的尺度信息。getFontMetrics()方法返回一个FontMetrics类的实例,FontMetrics类提供了如下的方法:
int getAscent() 返回字体的ascent。
int getDescent() 返回字体的descent。
int getLeading() 返回字体的leading。
int getHeight() 返回字体的height。字体高是字体ascent、descent和leading的总和。
int charWidth(int ch) 返回指定字符的宽度。
int charWidth(char ch) 返回指定字符的宽度。
int [] getWidths() 返回一个包含字体头256个字符宽度的整型数组。
象上面提到的一样,那些整理字体的字符有时可能超过ascent、descent及用上述方法得到的宽度,在这种情况下精确的数值是必需的,下面的方法提供了这种功能。
int getMaxAscent()返回字体的最大ascent。
int getMaxDescent()返回字体最大descent。
int getMaxAdvance()返回字体的宽度。
下面的方法提供了关于一串字符占据的宽度信息。
int stringWidth(String str)返回字符串宽度。
int bytesWidth(byte [] rgb, int offset, int length)返回从offset开始的length长的bytes的宽度。
int charsWidth(char [] rgc, int offset, int length) 返回从offset开始的length长的字符的宽度。
Font类
Font类封装了关于字体的一些信息,一个新的字体是通过创建一个带名称、类型及点阵大小的字体类实例来产生的。
Font f = new Font("Dialog", Font.PLAIN, 12);
一旦创建,一个字体就可以被分配给一个Graphics对象实例。
g.setFont(f);
Graphics对象将字体应用到所有以后与图形操作有关的文本。
Font类提供了一旦字体被创建后取得其相关信息的方法。
String getName()返回字体的名称。
String getFamily()返回特定字体名称的平台。
int getSize()返回字体的点阵大小。
int getStyle()返回字体的类型。
boolean isBold()返回是否字体加粗。
boolean isItalic()返回是否字体倾斜。
boolean isPlain()返回字体是否无格式。
一个范例
图5中的applet显示了一行文本在上面讲述的不同度量值时的情况。在baseline上是一根粗黑线,另外两根线标明了字体的ascent和descent,小竖线标明了字符的宽度,三个下拉式菜单允许你选择字体、字形及字号。

 

 

 

图5:一个交互式的字体尺度浏览器


结论
applet使用Graphics、Font和FontMetrics扩展类,它的源代码在这里:http://www.javaworld.com/javaworld/jw-01-1997/howto/Main.java。Graphics类象是待勘探的肥沃的土地,以后我们会继续接触到其他方面。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是使用Java设置文本编辑器字体大小、字号和颜色的示例代码: ```java import javax.swing.*; import java.awt.*; public class TextEditor extends JFrame { private JTextArea textArea; public TextEditor() { // 创建一个新的 JFrame 窗口 setTitle("文本编辑器"); setDefaultCloseOperation(EXIT_ON_CLOSE); setSize(600, 400); setLocationRelativeTo(null); // 创建一个新的 JTextArea 文本区域,并将其添加到 JFrame 窗口 textArea = new JTextArea(); add(new JScrollPane(textArea)); // 创建一个新的菜单栏,并将其添加到 JFrame 窗口 JMenuBar menuBar = new JMenuBar(); setJMenuBar(menuBar); // 创建一个新的菜单,并将其添加到菜单栏 JMenu formatMenu = new JMenu("格式"); menuBar.add(formatMenu); // 创建一个新的菜单项,并将其添加到菜单 JMenuItem fontMenuItem = new JMenuItem("字体"); formatMenu.add(fontMenuItem); // 添加字体菜单项的监听器 fontMenuItem.addActionListener(e -> { Font currentFont = textArea.getFont(); Font newFont = JFontChooser.showDialog(this, "选择字体", currentFont); if (newFont != null) { textArea.setFont(newFont); } }); // 创建一个新的工具栏,并将其添加到 JFrame 窗口 JToolBar toolBar = new JToolBar(); add(toolBar, BorderLayout.NORTH); // 创建一个新的字体大小下拉框,并将其添加到工具栏 Integer[] fontSizes = {8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24, 26, 28, 36, 48, 72}; JComboBox<Integer> fontSizeBox = new JComboBox<>(fontSizes); fontSizeBox.setSelectedItem(currentFont.getSize()); toolBar.add(fontSizeBox); // 添加字体大小下拉框的监听器 fontSizeBox.addActionListener(e -> { int fontSize = (Integer) fontSizeBox.getSelectedItem(); Font currentFont = textArea.getFont(); Font newFont = new Font(currentFont.getName(), currentFont.getStyle(), fontSize); textArea.setFont(newFont); }); // 创建一个新的字体颜色按钮,并将其添加到工具栏 JButton fontColorButton = new JButton("字体颜色"); toolBar.add(fontColorButton); // 添加字体颜色按钮的监听器 fontColorButton.addActionListener(e -> { Color currentColor = textArea.getForeground(); Color newColor = JColorChooser.showDialog(this, "选择字体颜色", currentColor); if (newColor != null) { textArea.setForeground(newColor); } }); } public static void main(String[] args) { TextEditor editor = new TextEditor(); editor.setVisible(true); } } ``` 在上面的代码,我们首先创建了一个新的 JFrame 窗口,并将一个 JTextArea 文本区域添加到其。然后,我们创建了一个新的菜单栏和菜单,以及一个名为“字体”的菜单项。当用户点击“字体”菜单项时,我们使用 JFontChooser 显示了一个字体选择器对话框,让用户选择新的字体。然后,我们根据用户的选择更新了 JTextArea 的字体。 接下来,我们创建了一个新的工具栏,并添加了一个字体大小下拉框和一个字体颜色按钮。当用户选择新的字体大小或颜色时,我们同样根据用户的选择更新了 JTextArea 的字体大小或颜色。 需要注意的是,上面的代码引用了一些第三方库,如 JFontChooser 和 JColorChooser。这些库可以方便地提供字体选择器和颜色选择器对话框,使得我们的代码更加简洁和易读。如果您想要使用这些库,需要先在项目引入相关的 jar 包。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值