HOWTO · Java

在 Java 中使用 setFont

本教程展示了在 Java 中使用 setFont 方法的方法。

本頁內容

在本文中,我們將學習如何使用從 javax.swing.JFrame 類中的 java.awt.Container 繼承的 setFont() 方法。顧名思義,該函式將字型設定為 JFrame 的元件。

在 JFrame 中使用 setFont() 設定新字型

在這個例子中,我們為 JFrame 元件設定了一種新字型。

首先,我們建立一個 JFrame 物件和兩個 JLabel 型別的標籤。我們用它們的文字初始化標籤。

現在我們建立一個名為 myFont1 的 Font 物件,在建構函式中,我們傳遞三個引數,第一個是我們要設定的字型,第二個是可以使用 Font 類呼叫的字型樣式,以及最後一個引數是 int 型別值的字型大小。

我們建立另一個 Font 物件,myFont2,併為它設定一個不同的字型值。我們使用 JLabel 物件呼叫 setFont() 函式並將 Font 物件傳遞給它們。

之後,我們使用 setBounds() 函式設定元件的位置和大小,並使用 add() 將它們新增到 JFrame。最後,我們設定 JFrame 的大小和可見性。

import java.awt.*;
import javax.swing.*;

public class Main {
  public static void main(String[] args) {
    JFrame jFrame = new JFrame("Set Font Example");
    JLabel jLabel1, jLabel2;

    jLabel1 = new JLabel("Label with Serif Font");
    jLabel2 = new JLabel("Label with Arial Font");

    Font myFont1 = new Font("Serif", Font.BOLD, 12);
    jLabel1.setFont(myFont1);

    Font myFont2 = new Font("Arial", Font.BOLD, 12);
    jLabel2.setFont(myFont2);

    jLabel1.setBounds(80, 100, 120, 30);
    jLabel2.setBounds(80, 80, 120, 30);

    jFrame.add(jLabel1);
    jFrame.add(jLabel2);
    jFrame.setSize(300, 300);

    jFrame.setLayout(null);
    jFrame.setVisible(true);
  }
}

輸出:

Java setFont

使用 setFont() 和 getFont().deriveFont() 在現有字型中設定樣式

在前面的示例中,我們看到了如何使用 setFont() 設定新字型,但我們也可以使用此方法為 JFrame 元件的現有字型設定新樣式。

為此,我們首先使用 component.getFont() 獲取元件的字型,然後呼叫接受我們想要應用的樣式的 deriveFont() 函式。我們通過 Font.ITALIC 使 JLabel 上的字型變為斜體。

import java.awt.*;
import javax.swing.*;

public class Main {
  public static void main(String[] args) {
    JFrame f = new JFrame("Set Font Example");
    JLabel jLabel1;

    jLabel1 = new JLabel("Label with Italic Style");

    jLabel1.setFont(jLabel1.getFont().deriveFont(Font.ITALIC));
    jLabel1.setBounds(80, 100, 120, 30);

    f.add(jLabel1);
    f.setSize(300, 300);

    f.setLayout(null);
    f.setVisible(true);
  }
}

輸出:

Java setFont

使用 setFont() 和 Font.createFont() 設定自定義字型

在這個例子中,我們設定了一個自定義字型,這與我們已經在類中設定字型的第一個程式不同。

為了獲取自定義字型,我們下載它並將其儲存在我們專案目錄的根目錄中。我們在這個例子中使用 oswald.ttf 字型檔案。

我們建立一個 JLabel 並初始化它以獲取我們稱為 BufferedInputStream 的字型檔案,並傳遞一個 FileInputStream 的物件,該物件將字型檔案的路徑作為引數。現在我們得到了一個 InputStream 物件。

要建立新字型,我們從 Font 類呼叫 createFont(),並將字型資源型別作為第一個引數傳遞,將 InputStream 作為第二個引數傳遞。我們使用 deriveFont() 方法將自定義字型設定為 JLabel 元件。

畢竟,現在我們將元件新增到 JFrame。輸出顯示自定義字型。

package sample;

import java.awt.*;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.swing.*;

public class Main {
  public static void main(String[] args) {
    JFrame f = new JFrame("Set Font Example");
    JLabel jLabel;

    jLabel = new JLabel("Label with a Custom Font");

    try {
      InputStream inputStream = new BufferedInputStream(new FileInputStream("oswald.ttf"));

      Font font = Font.createFont(Font.TRUETYPE_FONT, inputStream);

      jLabel.setFont(font.deriveFont(Font.BOLD, 12f));

    } catch (FontFormatException | IOException e) {
      e.printStackTrace();
    }

    jLabel.setBounds(80, 100, 120, 30);

    f.add(jLabel);
    f.setSize(300, 300);

    f.setLayout(null);
    f.setVisible(true);
  }
}

輸出:

Java setFont