4

Windows XP で開発された Java 7 Swing アプリケーションがあります。クロス プラットフォームのルック アンド フィールを使用します。

UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());

Linux(Fedora 12)で実行すると。フォントは少し幅広です。これに伴い、所々レイアウトを変更しております。

jreに付属しているがローカルシステムには付属していない同じフォントまたは類似のフォントをアプリケーションで使用する方法はありますか? 次に、そのルックアンドフィールをまったく同じにすることができます。

ありがとう、

4

3 に答える 3

4

あなたは見ることができますUIManager。Swing は、 などのプロパティを使用して、Label.fontデフォルトのフォントを取得します。したがって、次のことができます。

Font font = // create font
UIManager.put("Label.font", font)

コンポーネントを作成する前にこれらを変更してください。そうしないと、正しいフォントを持つものと持たないものがあります。にあるデフォルトのプロパティを表示するプログラムUIManagerを次に示します。で終わる.fontものは何でもあなたが探しているものです。

別のアプローチは、独自のデフォルトでコンポーネントを作成するユーティリティ クラスを作成することです。

public class MyComponents {

    public static final Font LABEL_FONT = // create font

    public static JLabel createLabel(String text) {
        JLabel label = new JLabel(text);
        label.setFont(LABEL_FONT);
        return label;
    }
}

これが多くのコンポーネントを持たない新しいアプリケーションである場合は、2 番目のアプローチをお勧めします。多くのコンポーネント生成があちこちに散らばっている古いアプリケーションの場合、最初のアプローチの方が時間はかかりませんが、それでもおそらく 2 番目のアプローチの方がよいでしょう。

于 2012-08-30T18:15:33.730 に答える
1

これはうまくいかないかもしれませんが。アプリケーションにバンドルされた独自のフォントを提供し、実行時にそれをロードできます。

Load fonts out of JAR-file and create AWT font (works) and register iText font (dos not work)の例 (答えは正しくありませんが、意図は良いです) またはhttp://www.java2s を確認してください。 com/Code/Java/2D-Graphics-GUI/Loadfontfromttffile.htm

ロードしたら、UIManager のプロパティを調べて、すべてのキーをフォントの名前の ".font" に置き換えます。

最終的に直面する問題は、DPI などを含む OS のレンダリング エンジンの違いと、フォント レンダリング エンジンの違いです。

于 2012-08-30T21:34:32.627 に答える
1

これがフォントの問題なのかレイアウトの問題なのかは明らかではありません。当然のことながら、sscceは、何が問題であると認識しているかを説明するのに役立ちます。対照的に、このは、さまざまなプラットフォームでデフォルトのフォント ファミリに対応するためにレイアウトを調整する方法を示しています。

クロスプラットフォームの L&Fを使用しているため、ここに示すように、太字のフォントをオフにすることをお勧めします。一部のプラットフォームでは、実際のボールド フォントを使用する代わりに、プレーン フォントからボールド スタイルを派生させていますが、多くの場合、さまざまな結果が得られます。

于 2012-08-31T15:19:42.060 に答える