2012-10-21 67 views
13

Tôi cần sử dụng phông chữ tùy chỉnh (ttf) trong ứng dụng Java Swing của mình. Làm cách nào để thêm chúng vào gói của tôi và sử dụng chúng?Thêm phông chữ vào ứng dụng Swing và bao gồm trong gói

Có nghĩa là trong khi, tôi chỉ cài đặt chúng trong các cửa sổ và sau đó tôi sử dụng chúng, nhưng tôi không muốn việc sử dụng ứng dụng sẽ phức tạp đến vậy, nó không thuận tiện để yêu cầu người dùng cài đặt phông trước sử dụng ứng dụng của tôi.

+0

Nó có thể là một câu hỏi trùng lặp, xem [ở đây] (http://stackoverflow.com/questions/5652344/how-can-i-use-a-custom-font- trong java). – linski

+1

@DanM Nếu bạn mở một khoản tiền thưởng vì bạn không hài lòng với câu trả lời hiện tại, bạn nên làm rõ lý do tại sao nó không trả lời câu hỏi của bạn và/hoặc thông tin bổ sung nào bạn cần. – assylias

+0

có thể trùng lặp của [nhúng phông chữ trong Java] (http://stackoverflow.com/questions/4487871/embedding-a-font-in-java) –

Trả lời

16

Bạn có thể tải chúng qua một InputStream:

InputStream is = MyClass.class.getResourceAsStream("TestFont.ttf"); 
Font font = Font.createFont(Font.TRUETYPE_FONT, is); 

phông chữ được nạp này không có cài đặt phông chữ được xác định trước như vậy để sử dụng, bạn sẽ phải làm:

Font sizedFont = font.deriveFont(12f); 
myLabel.setFont(sizedFont); 

Xem:

Physical and Logical Fonts

+0

Tôi cần đặt tệp TestFont.ttf ở đâu? – DanM

+0

Ví dụ ở trên cần phải ở cùng vị trí với tệp lớp. – Reimeus

+1

Hoặc nếu nó nằm trong một gói, bạn có thể truy cập nó theo tên gói đầy đủ. ví dụ: tôi có tập tin ttf _foo.ttf_ trong gói _foo.bar.master.cork_, tôi sẽ truy cập nó thông qua 'getResourceAsStream ("/foo/bar/master/cork/foo.ttf ")'. Điều này có nghĩa là: đặt dấu gạch chéo ở đầu, thay thế mỗi dấu chấm bằng dấu gạch chéo (ngoại trừ tên tệp.) Và dấu gạch chéo ở cuối đường dẫn ** nhưng trước tệp. ** – TheBrenny

7

Như Reimeus đã nói, bạn có thể sử dụng InputStream. Bạn cũng có thể sử dụng một File:

File font_file = new File("TestFont.ttf"); 
Font font = Font.createFont(Font.TRUETYPE_FONT, font_file); 

Trong cả hai trường hợp, bạn sẽ đặt các file font của bạn trong cả hai thư mục gốc của dự án của bạn hoặc một số thư mục con. Thư mục gốc có thể là thư mục mà chương trình của bạn chạy. Ví dụ, nếu bạn có một cấu trúc thư mục như:

My_Program 
| 
|-Fonts 
| |-TestFont.ttf 
|-bin 
    |-prog.class 

bạn sẽ chạy chương trình của bạn với từ thư mục My_Program với java bin/prog. Sau đó, trong mã của bạn, đường dẫn tệp và tên để chuyển đến InputStream hoặc File sẽ là "Fonts/TestFont.ttf".

0

Hãy thử điều này:

@Override 
public Font getFont() { 
    try { 
     InputStream is = GUI.class.getResourceAsStream("TestFont.ttf"); 
     Font font = Font.createFont(Font.TRUETYPE_FONT, is); 
     return font; 
    } catch (FontFormatException | IOException ex) { 
     Logger.getLogger(GUI.class.getName()).log(Level.SEVERE, null, ex); 
     return super.getFont(); 
    } 
} 
Các vấn đề liên quan