1

Java 1.4 で書かれたスイング アプリのラベル/ボタン テキストにフォントをロードしようとしています。何らかの理由で、例外なくフォントが読み込まれますが、ボタンに完全に異なるフォントが表示されます。1.5 jre で同じコードを実行すると、正常に動作するように見えます。なぜこれが起こるのですか?

更新 1.4、1.5 で sysout を印刷すると、次のようになります。

jre 1.5 : java.awt.Font[ファミリー=Futura LT,名前=Futura LT ミディアム,スタイル=ボールド,サイズ=14]

jre 1.4 : java.awt.Font[ファミリ = ダイアログ、名前 = Futura LT ミディアム、スタイル = ボールド、サイズ = 14]

フォント名ファミリーが違う!何故ですか?

以下は、diff jres でどのように見えるかのイメージです (左は 1.5、右は 1.4)。

ここに画像の説明を入力

コード

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Font;
import java.awt.FontFormatException;
import java.io.IOException;
import java.io.InputStream;

import javax.swing.JButton;
import javax.swing.SwingUtilities;

import org.jdesktop.swingx.MultiSplitLayout;
import org.jdesktop.swingx.MultiSplitPane;
import org.jdesktop.swingx.MultiSplitLayout.Node;



/**
 * 
 * @author Hans Muller (Hans.Muller@Sun.COM)
 */
public class Example2 extends Example {
    protected void initialize(String[] ignore) {
        super.initialize(ignore);

        String layoutDef = "(COLUMN (LEAF name=column1 weight=0.25) (LEAF name=column2 weight=0.25) (LEAF name=column3 weight=0.25) (LEAF name=column4 weight=0.25) )";
        Node modelRoot = MultiSplitLayout.parseModel(layoutDef);

        MultiSplitPane multiSplitPane = new MultiSplitPane();
        multiSplitPane.setDividerSize(5);
        multiSplitPane.getMultiSplitLayout().setModel(modelRoot);
        JButton comp = new JButton("TEST TEXT");
        comp.setFont(loadFont("FuturaLT.ttf",14,Font.BOLD));
        multiSplitPane.add(comp, "column1");
        multiSplitPane.add(new JButton("Test Text"), "column2");
        Container cp = mainFrame.getContentPane();
        cp.add(multiSplitPane, BorderLayout.CENTER);
    }

    private static Font loadFont(String fontName, float size, int style) {

        InputStream openStream = FontColorScheme.class
                .getResourceAsStream("resources/fonts/FuturaLT/"
                        + fontName);
        ;
        try {
            Font font = Font.createFont(Font.TRUETYPE_FONT, openStream);
            Font finalFont = font.deriveFont((float) size).deriveFont(style);
            System.out.println("Loading font " + fontName + " " + finalFont);
            return finalFont;
        } catch (FontFormatException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (openStream != null) {
                try {
                    openStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return null;
    }

    public static void main(final String[] args) {
        System.setProperty("awt.useSystemAAFontSettings", "off");
        Runnable doCreateAndShowGUI = new Runnable() {
            public void run() {
                try {
                    Example2 app = new Example2();
                    app.initialize(args);
                    app.show();
                } catch (Exception e) {
                    // TBD log an error
                }
            }
        };
        SwingUtilities.invokeLater(doCreateAndShowGUI);
    }
}
4

2 に答える 2

2

レンダリングは正しく、3 つの領域があります

于 2013-06-12T07:57:33.677 に答える