私はSwingアプリケーションをOS XからWindowsに移植し始めました。状況はJLabel
で苦しいです。JLabel htmlテキストはsetFontを無視します
setFont
に指定されたフォントは、ラベルのテキストがHTMLの場合は無視されます(これはMacでは発生しません)。 HTMLフォーマットは、複雑なディスプレイでの読み易さには非常に便利です。
通常の状況では、HTMLタグにフォントを指定しますが、使用しているフォントは実行時にFont.createFont
を使ってJARのttfを使ってロードされます。私はフォントタグで読み込まれたフォントの名前を使用しようとしましたが、うまくいきませんでした。
ロードされたawt.Font
をhtml-ifiedで使用する方法はありますか?WindowsのJLabel
?
例を示します。私は自分のアプリケーションのフォントを共有することはできませんが、私はこの1つだけ(純粋TTF)と同じ動作でそれを実行しましたが起こる:
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:興味深いことに、Iのいずれかを使用している場合JREのlib/fontsフォルダ(ここではLucidaフォントの1つをtest_java.ttfに改名したもの)からのttfです。このスニペットはブール値onとoffで同じ結果を生成します。
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:JLabelのフォントのデフォルトを設定するために、ここで説明する方法はまったく同じ問題を抱えている(平文が罰金を示し、html'dテキストはしていません):Changing default JLabel font
EDIT 3:私はしましたdafontのランダムなフォントでさえ、システムにインストールされていればうまく動作することに気がつきました(ファイルから[今インストールされている] ttfのコピーをロードしているこの正確なコードでも)。
[sscce](http://www.sscce.org)を含めることは可能でしょうか?その間に、[Swing ComponentsでHTMLを使用する方法](http://download.oracle.com/javase/tutorial/uiswing/components/html.html)のチュートリアルを読んでください。 – mre
'Font.createFont'に問題がある可能性が高いです。'Jlabel'の' setFont() 'はフォントを設定することが保証されています - @mreの示唆しているように、この例はこれをより良く答えるのに役立ちます。 –
JLabelのsetText( "example")に読み込まれたフォントが表示されますが、setText( " example")の場合、デフォルトのSwing JLabelフォントが使用されるため、Font.createFontが機能することがわかります。これはsscceとしてカウントされますか? –