Tôi có một JButton và tôi muốn thêm một biểu tượng vào nó. Tôi muốn sử dụng các biểu tượng dựa trên phông chữ từ FontAwesome cung cấp tệp phông chữ TrueType. Biểu tượng tôi đang cố gắng thêm vào là biểu tượng nút phát. Biểu tượng nút phát trong tệp css cho FontAwesome là \f04b
mà tôi tin dịch sang \uf04b
trong Java.Thêm biểu tượng vào JButton bằng phông chữ tùy chỉnh từ AwesomeFont và các ký tự unicode trong Java Swing?
Đây là cách tôi tải phông chữ trong hàm tạo bởi lớp cơ sở IconButton.
public class IconButton extends JButton {
public IconButton() {
try {
InputStream in = this.getClass().getResourceAsStream("/fontawesome-webfont.ttf");
Font ttfBase = Font.createFont(Font.TRUETYPE_FONT, in);
Font ttfReal = ttfBase.deriveFont(Font.BOLD, 24);
setFont(ttfReal);
} catch (FontFormatException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Trong lớp triển khai StartButton đây là cách tôi đặt văn bản.
public class StartButton extends IconButton {
public StartButton() {
setText(String.valueOf('\u0f4b'));
setForeground(Color.BLACK);
}
}
Đây là những gì tôi nhận được. Không có gì.
Mọi trợ giúp đều được đánh giá cao.
CHỈNH SỬA: Xem câu trả lời bên dưới.
Đó mã đầu tiên wold không biên dịch ('createFont' ném ngoại lệ mà không bị bắt cũng không tuyên bố), và có vẻ như thiết kế khủng khiếp của hai lớp được hiển thị (1. lớp đầu tiên có thể tạo Font một lần và lưu nó thành thuộc tính tĩnh 2. nếu nó định nghĩa một hàm tạo dựa trên một String cho văn bản, gọi hàm tạo siêu, nó có thể avo id lớp thứ hai hoàn toàn). Thay thế A. vì 'IconButton' đặt một' Font' và 'StartButton' đặt một màu nền trước, sử dụng một' JButton' chuẩn và đưa mỗi cái vào một phương thức để cấu hình giao diện. B. Sử dụng một PLAF mới hoặc điều chỉnh 'UIManager' –
Mã không được kéo nguyên văn từ ứng dụng để giảm tiếng ồn, nhưng vì đầy đủ vì tôi đã cập nhật nó để bao gồm thử/nắm bắt. Tôi cũng sẽ thêm rằng tôi đồng ý nó chỉ nên tạo Font một lần. Gợi ý tốt. Tôi sẽ phải xem xét PLAF và UIManger. –
* "Mã không được rút nguyên văn từ ứng dụng" * Có lẽ tốt hơn để mô tả nó bằng chữ hoặc mã giả (được đánh dấu rõ ràng như vậy) thay vì mã Java trong trường hợp đó. Tốt kêu gọi cập nhật nó. :) –