2012-03-09 89 views
13

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ì.

JButton

Mọi trợ giúp đều được đánh giá cao.

CHỈNH SỬA: Xem câu trả lời bên dưới.

+0

Đó 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' –

+0

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. –

+0

* "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ó. :) –

Trả lời

12

Tôi nghĩ rằng tôi đã giải quyết điều này thực sự. Ký tự chính xác là \uf04b không phải là \u0f4b. Rất tiếc! :)

Tính năng này hiện đang hoạt động cho tôi.

JButton with Play Icon

+2

Bạn có thể và nên chấp nhận câu trả lời của riêng bạn! (Có một bài đăng blog về điều này trên blog SO ở đâu đó) – JavaAndCSharp

1

Hãy thử jIconFont (Swing hoặc JavaFX) tại http://jiconfont.github.io/

Ví dụ:

Icon icon = IconFontSwing.buildIcon(FontAwesome.FLOPPY_O, 15); 

JButton button = new JButton(icon); 
+1

Vui lòng không sao chép và dán cùng một câu trả lời chính xác cho nhiều câu hỏi – Andy

+0

Lời xin lỗi của tôi. Tôi nên tiến hành như thế nào khi câu trả lời cho nhiều câu hỏi giống hệt nhau? –

Các vấn đề liên quan