6

スイングアプリケーションの場合、コンポーネントのデフォルトのフォント設定は現在のテーマにあり、UIManagerを使用して取得できます。

public class JavaTesting {
    public static void main(String[] args) {
        System.out.println(UIManager.get("Label.font"));
    }
}

これは、次のようなさまざまなアプリケーションのJAVA_HOME / lib/swing.propertiesで調整できます。

swing.defaultlaf=javax.swing.plaf.nimbus.NimbusLookAndFeel

または、コマンドラインで次のように設定します。

java -Dswing.defaultlaf=javax.swing.plaf.nimbus.NimbusLookAndFeel MyApp

または、アプリケーション自体がルックアンドフィールを記憶し、この値を構成(ファイル)のどこかに保存します。アプリケーションはそれ自体のルックアンドフィールを設定できるため、これは機能します。例:

UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel");      

これはすべて見栄えがしますが、アプリケーションには多くの場合、小さいフォント(ラベルの重要でないステータスバーメッセージなど)または大きいフォント(見出しのあるラベル)が必要です。これに推奨される方法はありますか? 高密度モニターのユーザーとして、私は次のようなコードを使用する多くのJavaアプリケーションを破棄する必要がありました-squirrelsqlからコピーされたソースコード:

Font tmp = (Font)UIManager.get("Label.font");
if (tmp != null) {
        Font font = tmp.deriveFont(10.0f);
        _statusBarFontInfo = new FontInfo(font);
}

このサンプルコードではステータスバーが完全に読めなくなりますが、ほとんどのコンポーネントは新しい大きなフォントに調整されています。

独自のアプリケーションを作成するために、ある程度の比率(たとえば、テーマフォントの50%から150%)を使用する場合がありますが、0.50〜1.50の範囲のハードコーディングも悪いコーディング習慣のように見えます。そして、それは私がソースコードを持っていないアプリケーションの問題を修正しません。これはテーマ/L&F(Look&Feel、Look andFeel)に属しています。例:

FontUIResource Label_font_resource = (FontUIResource)javax.swing.UIManager.get("Label.font");
Font Label_font = Label_font_resource;
Font Label_font_bigger = Label_font.deriveFont(Label_font.getSize2D() * 1.5f);

スイングのデフォルトコンポーネントを置き換えるカスタムコンポーネント、Graphics2D.setFont調整、またはその他の恐ろしいものなど、いくつかの醜いハックを試す前に、尋ねる価値があります。:-)

編集:存在する唯一のものは、ニンバステーマによってのみサポートされているサイズバリアントです。許可される値は、「ミニ」、「小」、「通常」、「大」です。例:

JComponent mini = new JButton("mini");
mini.putClientProperty("JComponent.sizeVariant", "mini");

ただし、Nimbusテーマのソースコードを調べると、これらの値を単純に調整することはできません(たとえば、「大」の場合は150%にスケールする)。実際にはハードコーディングされています。

package javax.swing.plaf.nimbus;

public final class NimbusStyle extends SynthStyle
{
  public static final String LARGE_KEY = "large";
  public static final String SMALL_KEY = "small";
  public static final String MINI_KEY = "mini";
  public static final double LARGE_SCALE = 1.15D;
  public static final double SMALL_SCALE = 0.857D;
  public static final double MINI_SCALE = 0.714D;

この値は、非常に上級のユーザーのみが編集できます(たとえば、「rej」というプログラムを使用してJAVA_HOME / lib / rt.jarの定数プールを編集します)-試してみましたが、機能しますが、常に機能するとは限りません。実際には、いくつかの場所で定数をハードコーディング(!!)します(これは本当に最高の品質です-標準ライブラリですか?)、例:

if ("large".equals(str))
{
    this.scrollBarWidth = (int)(this.scrollBarWidth * 1.15D);
    this.incrGap = (int)(this.incrGap * 1.15D);
    this.decrGap = (int)(this.decrGap * 1.15D);
}

結論:いいえ、Javaのルックアンドフィールは今のところそれをサポートしていません。デフォルトのフォントサイズの0.7〜1.3などの比率を使用することをお勧めします。

JLabel smallLabel = new JLabel("some text");
smallLabel.setFont(smallLabel.getFont().deriveFont(0.8f * smallLabel.getFont().getSize2D()));
4

2 に答える 2

1

を変更する代わりにFont、ニンバスにはsizeVariantミニ、スモール、レギュラー、ラージのコンポーネントがあります。この記事にはさらに多くの例があります:コンポーネントのサイズ変更

myButton.putClientProperty("JComponent.sizeVariant", "mini");
于 2012-12-26T15:57:27.570 に答える
0

Swingアプリケーションで行ったことは、Fontクラスを含めることです。フォントを必要とする他のすべてのSwingコンポーネントは、Fontクラスを呼び出します。

import java.awt.Font;

public class MinesweeperFont {

    protected static final String FONT_NAME = "Comic Sans MS";

    public static Font getBoldFont(int pointSize) {
        return new Font(FONT_NAME, Font.BOLD, pointSize);
    }

}

この場合、必要なフォントタイプは1つだけです。アプリケーションにフォントサイズを選択させます。

必要なフォントサイズごとにメソッドを定義できます。おそらく、それらを小、中、大と呼びます。そのため、必要に応じて、後でメソッドを変更して、異なるポイントサイズまたはタイプを使用できます。

アプリケーション全体がこれらのフォント静的メソッドを呼び出すため、1か所でフォントを変更するだけで済みます。

于 2012-12-26T14:07:11.750 に答える