在 Java 中设置字体大小,主要取决于你使用的图形界面库,下面我将为你详细介绍在 Java Swing 和 JavaFX 这两个最主流的 GUI 库中如何设置字体大小,并附上清晰的代码示例。

核心概念
无论使用哪个库,设置字体大小的基本思路都是:
- 获取或创建一个
Font对象。Font类是 Java 中用于表示字体的核心类。 - 设置字体的大小,在创建
Font对象时,你需要指定字体名称、样式(如普通、粗体)和大小。 - 将
Font对象应用到组件上。JLabel、JButton或Text组件。
Java Swing 中的字体设置
Swing 是 Java 传统的 GUI 工具包,在 Swing 中,所有可见的组件(如 JLabel, JButton, JTextField 等)都有一个 setFont(Font font) 方法。
步骤:
-
创建
Font对象:使用Font类的静态工厂方法Font.createFont()或Font.decode(),但最常用的是Font的构造函数:new Font(String name, int style, int size)name: 字体名称,"Arial", "宋体", "Times New Roman",你可以使用GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames()来获取系统所有可用的字体。style: 字体样式,使用Font类的静态常量:Font.PLAIN(普通)Font.BOLD(粗体)Font.ITALIC(斜体)- 可以用 组合,如
Font.BOLD | Font.ITALIC。
size: 字体大小(以磅为单位,point),这是你设置大小的关键参数。
-
将字体应用到组件:调用组件的
setFont()方法。
(图片来源网络,侵删)
代码示例:
import javax.swing.*;
import java.awt.*;
public class SwingFontSizeExample {
public static void main(String[] args) {
// 1. 创建窗口
JFrame frame = new JFrame("Swing 字体大小设置示例");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 300);
frame.setLayout(new FlowLayout()); // 使用流式布局
// 2. 创建一个标签
JLabel label1 = new JLabel("这是默认大小的文本 (14px)");
frame.add(label1);
// 3. 创建一个新的 Font 对象,大小设为 24
Font largeFont = new Font("宋体", Font.PLAIN, 24);
// 4. 将新字体应用到第二个标签
JLabel label2 = new JLabel("这是大号文本 (24px)");
label2.setFont(largeFont); // 设置字体
frame.add(label2);
// 5. 创建一个粗体斜体的字体
Font boldItalicFont = new Font("Arial", Font.BOLD | Font.ITALIC, 18);
JLabel label3 = new JLabel("这是粗体斜体文本 (18px)");
label3.setFont(boldItalicFont);
frame.add(label3);
// 6. 显示窗口
frame.setVisible(true);
}
}
动态修改字体大小
如果你想在程序运行时动态修改字体大小,只需再次调用 setFont() 方法即可。
// 假设你有一个按钮和一个标签
JButton increaseButton = new JButton("增大字体");
JLabel dynamicLabel = new JLabel("点击按钮改变我");
increaseButton.addActionListener(e -> {
Font currentFont = dynamicLabel.getFont();
// 获取当前字体大小,然后增加 5
float newSize = currentFont.getSize() + 5;
// 创建一个新字体,保持原有的名称和样式
Font newFont = currentFont.deriveFont(newSize);
dynamicLabel.setFont(newFont);
});
JavaFX 中的字体设置
JavaFX 是更现代的 GUI 框架,是 Swing 的继任者,在 JavaFX 中,设置字体同样简单,但 API 略有不同。
步骤:
-
创建
Font对象:使用Font类的静态方法font(String family, double size)或font(double size),你也可以使用Font.loadFont()从文件加载字体。family: 字体系列名称,如 "System", "Arial", "SimSun"。size: 字体大小(以磅为单位)。
-
将字体应用到节点:几乎所有 JavaFX 节点(如
Label,Button,Text)都有一个setFont(Font font)方法。
代码示例:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.VBox;
import javafx.scene.text.Font;
import javafx.stage.Stage;
public class JavaFXFontSizeExample extends Application {
@Override
public void start(Stage primaryStage) {
// 1. 创建一个标签
Label label1 = new Label("这是默认大小的文本");
// 默认字体大小通常是 13 或 14,取决于平台
// 2. 创建一个新的 Font 对象,大小设为 24
Font largeFont = Font.font("Arial", 24.0); // 指定字体系列和大小
Label label2 = new Label("这是大号文本 (24px)");
label2.setFont(largeFont);
// 3. 创建一个粗体字体
// Font.font() 方法可以链式调用样式
Font boldFont = Font.font("System", Font.BOLD, 18.0);
Label label3 = new Label("这是粗体文本 (18px)");
label3.setFont(boldFont);
// 4. 创建一个斜体字体
Font italicFont = Font.font("SimSun", Font.ITALIC, 16.0);
Label label4 = new Label("这是斜体文本 (16px)");
label4.setFont(italicFont);
// 5. 将所有标签添加到布局容器中
VBox root = new VBox(10); // Vbox,间距为10
root.getChildren().addAll(label1, label2, label3, label4);
// 6. 创建场景并显示窗口
Scene scene = new Scene(root, 400, 300);
primaryStage.setTitle("JavaFX 字体大小设置示例");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
动态修改字体大小
在 JavaFX 中,你可以使用 Font.font() 方法的重载版本,它接受一个 double 类型的 size 参数,并结合 Font.getDefault() 来保持字体系列和样式不变。
import javafx.scene.text.Font;
// 假设你有一个按钮和一个标签
Button increaseButton = new Button("增大字体");
Label dynamicLabel = new Label("点击按钮改变我");
increaseButton.setOnAction(e -> {
// 获取当前字体
Font currentFont = dynamicLabel.getFont();
// 获取当前大小并增加
double newSize = currentFont.getSize() + 2;
// 创建新字体,保持原有的字体系列
Font newFont = Font.font(currentFont.getFamily(), newSize);
dynamicLabel.setFont(newFont);
});
总结与对比
| 特性 | Java Swing | JavaFX |
|---|---|---|
| 核心类 | java.awt.Font |
javafx.scene.text.Font |
| 创建字体 | new Font(name, style, size) |
Font.family(size) 或 Font.family(style, size) |
| 设置大小 | 在构造函数中指定 size 参数 |
在 Font 静态方法中指定 size 参数 |
| 应用到组件 | component.setFont(myFont) |
node.setFont(myFont) |
| 动态修改 | 同样使用 setFont(),可以基于旧字体创建新字体 |
同样使用 setFont(),可以使用 Font.font(oldFont.getFamily(), newSize) |
重要提示:单位
在 Java 中,无论是 Swing 还是 JavaFX,字体大小的单位都是 磅,1磅约等于1/72英寸,这是一个绝对单位,而不是像素,在不同分辨率的屏幕上,相同的磅值会显示为不同的像素大小,从而保证文本的物理大小基本一致。
