CẬP NHẬT - sự cố hiện được giải quyết theo cách xấu xí - nhưng phải có cách thích hợp để thực hiện?Hiển thị HTML Java JLabel bị cắt xén khi phông chữ mâu thuẫn với phông chữ hệ thống
Tôi đang gặp sự cố khi hiển thị văn bản trong phông chữ tùy chỉnh, trong HTML trong JLabel khi tên phông chữ mâu thuẫn với tên của phông chữ đã được cài đặt trên hệ thống.
Phông chữ hệ thống ở định dạng khác (otf vs ttf) nên không ngạc nhiên khi văn bản bị cắt xén.
Cuộc gọi đến GraphicsEnvironment.getLocalGraphicsEnvironment().registerFont
trả về false để hiển thị phông chữ không đăng ký được. Vì vậy, tôi đoán câu hỏi là, có cách nào để sử dụng phông chữ này mà không cần đăng ký, hoặc một cách để đổi tên nó trước khi đăng ký?
Bây giờ tôi đã giải quyết được vấn đề của mình bằng cách chỉnh sửa tệp ttf và mangling tên phông chữ để thực hiện xung đột, nhưng tôi đoán phải có cách thích hợp để xử lý tình huống này.
package test;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Font;
import java.awt.FontFormatException;
import java.awt.GraphicsEnvironment;
import java.io.IOException;
import java.io.InputStream;
import javax.swing.JApplet;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
@SuppressWarnings("serial")
class MyComponent extends JPanel {
Font font; String text;
public MyComponent(Font f) {font=f;}
public void initSwing()
{
final String labelcontents = "<html><center>foo</center></html>";
System.out.println(labelcontents);
JLabel text = new JLabel(labelcontents);
text.setFont(font);
add(text,BorderLayout.CENTER);
}
}
@SuppressWarnings("serial")
public class TestApplet extends JApplet {
public void init()
{
Font mainFont = null;
InputStream is = getClass().getResourceAsStream("fonts/Exo-Bold.ttf");
try {
mainFont = Font.createFont(Font.TRUETYPE_FONT, is).deriveFont(24f);
System.out.println(mainFont.getName());
boolean registered=GraphicsEnvironment.getLocalGraphicsEnvironment().registerFont(mainFont);
System.out.println("registered "+registered);
} catch (FontFormatException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
final Container fframe = (JComponent)(getContentPane());
final MyComponent component = new MyComponent(mainFont);
Thread t = new Thread(new Runnable() {
public void run() { try {
SwingUtilities.invokeAndWait(new Runnable() {public void run() {
fframe.add(component);
component.initSwing();
fframe.revalidate();
fframe.repaint();
}});
} catch (Exception e) {
e.printStackTrace();
} }
});
t.start();
}
}
Font Exo-Bold được sử dụng trong đoạn code trên có thể - ví dụ - được tải về từ http: //www.1001freefonts. com/d/5755/exo.zip? –
Tôi không nhớ nguồn của nó ngay bây giờ nhưng nó là từ bộ sưu tập phông chữ miễn phí –
Có lẽ bạn có thể chia sẻ tệp phông chữ của mình? Bạn có thấy các vấn đề tương tự đối với phông chữ mặc định không? –