スイングアプリケーションの場合、コンポーネントのデフォルトのフォント設定は現在のテーマにあり、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()));