Tôi vừa mới bắt đầu chuyển ứng dụng Swing từ OS X sang Windows và mọi thứ đang gây đau đớn với JLabel
s.Văn bản html JLabel bỏ qua setFont
Tôi nhận thấy rằng phông chữ được chỉ định cho setFont
bị bỏ qua nếu văn bản của nhãn là HTML (điều này không xảy ra trên máy Mac). Định dạng HTML là cực kỳ hữu ích cho khả năng đọc trên màn hình phức tạp.
Trong các trường hợp bình thường, tôi chỉ định phông chữ trong thẻ HTML, nhưng phông chữ tôi đang sử dụng được tải vào thời gian chạy bằng cách sử dụng Font.createFont
với ttf ra khỏi JAR. Tôi đã thử sử dụng tên của phông chữ được tải trong thẻ phông chữ, nhưng điều đó không hoạt động.
Có cách nào tôi có thể sử dụng số được tải awt.Font
với một ified html JLabel
trên Windows không?
Đây là một ví dụ. Tôi không thể chia sẻ font chữ ứng dụng của tôi, nhưng tôi chỉ cần chạy nó với một này (TTF tinh khiết) và hành vi tương tự sẽ xảy ra:
http://www.dafont.com/sophomore-yearbook.font
import java.awt.Font;
import java.io.File;
import javax.swing.*;
public class LabelTestFrame extends JFrame {
public LabelTestFrame() throws Exception {
boolean useHtml = true;
String fontPath = "C:\\test\\test_font.ttf";
JLabel testLabel = new JLabel();
Font testFont = Font.createFont(Font.TRUETYPE_FONT, new File(fontPath)).deriveFont(18f);
testLabel.setFont(testFont);
if (useHtml) testLabel.setText("<html>Some HTML'd text</html>");
else testLabel.setText("Some plaintext");
getContentPane().add(testLabel);
setSize(300,300);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
try {new LabelTestFrame().setVisible(true);}
catch (Exception e) {e.printStackTrace();}
}
});
}
}
EDIT: thú vị đủ, nếu tôi sử dụng một trong ttf từ thư mục lib/fonts của JRE (trong trường hợp này một trong các phông chữ Lucida được đổi tên thành test_java.ttf) đoạn mã này tạo ra các kết quả giống hệt nhau với boolean và tắt.
public LabelTestFrame() throws Exception {
boolean useHtml = false;
String fontPath = "C:\\test\\test_java.ttf";
JLabel testLabel = new JLabel();
Font testFont = Font.createFont(Font.TRUETYPE_FONT, new File(fontPath)).deriveFont(18f);
testLabel.setFont(testFont);
if (useHtml) testLabel.setText("<html><b>Some HTML'd text</b></html>");
else testLabel.setText("Some plaintext");
getContentPane().add(testLabel);
setSize(300,300);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
try {new LabelTestFrame().setVisible(true);}
catch (Exception e) {e.printStackTrace();}
}
});
}
EDIT 2: Các phương pháp mô tả vào đây để thiết lập mặc định JLabel font chữ có chính xác cùng một vấn đề (bản rõ lãm mỹ, văn bản html'd không): Changing default JLabel font
EDIT 3: Tôi đã nhận thấy rằng ngay cả các phông chữ ngẫu nhiên từ dafont sẽ hoạt động nếu chúng được cài đặt trên hệ thống (ngay cả với mã chính xác này, nơi tôi được tải một bản sao của ttf [đã được cài đặt bây giờ] từ một tệp).
Bạn có thể bao gồm [sscce] (http://www.sscce.org) không? Trong thời gian chờ đợi, nếu bạn chưa có, hãy đọc hướng dẫn [Cách sử dụng HTML trong Swing Components] (http://download.oracle.com/javase/tutorial/uiswing/components/html.html). – mre
Rất có khả năng bạn 'Font.createFont' đang gặp sự cố.'SetFont()' của Jlabel' được đảm bảo đặt phông chữ - như @mre gợi ý, ví dụ sẽ giúp trả lời câu hỏi này tốt hơn. –
Tôi biết rằng Font.createFont hoạt động vì nếu tôi setText ("example") trên JLabel, phông chữ được tải sẽ hiển thị, nhưng nếu tôi setText (" example") thì phông chữ Swing JLabel mặc định được sử dụng. Điều này có được tính là sscce không? –