5

デフォルトのLookAndFeelではフォントサイズが小さすぎるため、数行のコードを使用してNimbusに設定すると、JOptionPaneにサイズの異なる[ はい]ボタンと[いいえ]ボタンが表示されます。はいはまだ非常に小さいですが、いいえは私が割り当てたサイズに設定されています。誰もがそれを修正する理由や方法を知っていますか?

public static void setUIFont(Font a){
    FontUIResource ax=new FontUIResource(a);
    javax.swing.UIManager.put("OptionPane.messageFont", ax);
    javax.swing.UIManager.put("OptionPane.buttonFont", ax);
    javax.swing.UIManager.put("OptionPane.Font", ax);
    javax.swing.UIManager.put("InternalFrame.titleFont", ax);
    javax.swing.UIManager.put("TextField.font", ax);
    javax.swing.UIManager.put("ComboBox.font", ax);
}

..。

UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"); 

class UseNimBus extends SwingInvoker{
    public void run(){
        JDialog.setDefaultLookAndFeelDecorated(true);
        setUIFont(new FontUIResource(new Font(ufont, Font.PLAIN, 20)));
    }
}
(new UseNimBus()).execute();// just invokeLater()

次の行はオプションペインを示していますが、サイズが異なる[はい]と[いいえ]があります。それは正常ですか、それとも私の問題ですか?

inputValuex=JOptionPane.showConfirmDialog(
    myWin, "Are you exiting?", "You clicked X", JOptionPane.YES_NO_OPTION);

アップデート

まだ動作していません。コードを使おうとしました

javax.swing.UIManager.put("OptionPane.isYesLast", true);

[はい]ボタンの位置を変更しますが、効果はありませんでした。ブール値などの値を設定する方法を見たかっただけです。

また、オプションペインまたはボタンUIManager.getDefaults()を含むすべてのキーをリストしました。それらのフォントサイズはすべて20に設定されています。[はい]ボタンはまだ小さいフォントです。

4

2 に答える 2

4

のフォントJButtonは実際にはプロパティから取得されていButton.fontます。

これをプロパティのリストに追加すると、機能します。

javax.swing.UIManager.put("Button.font", ax);

面白いのに、なぜ2つの異なるサイズを取得するのかは、現時点では私を超えています。

于 2013-03-19T02:30:26.130 に答える
4

optionPane で作成された最初のボタンにカスタム フォントを使用しない理由は、それが rootPane の defaultButton になっているためのようです。そのため、プロパティを検索するために使用される特別な状態 [デフォルト] があります - ボタンの設定フォントが UIResource タイプである場合。

それで何が起こるかは

  • OptionPaneUI は、作成されたすべてのボタンのフォントを、「OptionPane.buttonFont」の UIManager で見つかったフォントに設定します。
  • SynthButtonUI は、UIResource であるため、状態 [デフォルト] のボタンのフォントを無視します。

私にはわからない何らかの理由で (ただし、Nimbus では名前付き/子コンポーネントの検索が壊れていることを覚えておいてください)、以下の設定はどれも効果がありません

UIManager.put("\"OptionPane.button\"[Default].font", ax);
UIManager.put("OptionPane:\"OptionPane.button\"[Default].font", ax);

さらに、UIResource に設定すると、2 番目のボタンのカスタム フォントがロールオーバー/フォーカス時に失われます。ハックアラウンドは、UIResource として設定しないことです。つまり、

public static void setUIFont(Font a){
    // force usage of the button's font as set by optionPaneUI
    // by _not_ making it a uiResource
    UIManager.put("OptionPane.buttonFont", a);
    // use uiResource for others
    FontUIResource ax=new FontUIResource(a);
    UIManager.put("OptionPane.messageFont", ax);
    ...
}

通常、最高のアイデアではありません。しかし、ボタンは JOptionPane.create への呼び出しごとに作成され、個々のインスタンスに永続的な影響を与えないため、ここでは省略できます。

于 2013-03-20T11:12:38.467 に答える