由于字体尺寸在默认 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()
中包含 optionpane 或按钮的所有密钥,并且它们的字体大小都设置为20. 是按钮仍然是较小的字体。
答案 0 :(得分:4)
JButton
的字体实际上来自Button.font
属性。
如果我将此添加到您的属性列表中,则可以正常工作。
javax.swing.UIManager.put("Button.font", ax);
为什么你会得到两种不同的尺寸,虽然很有趣,但此时我已经超出了我的范围。
答案 1 :(得分:3)
看起来没有为optionPane中创建的第一个按钮获取自定义字体的原因是它是rootPane的defaultButton。因此,它有一个特殊的状态[Default],用于查找属性 - 如果按钮的设置字体是UIResource类型。
所以会发生什么
由于某种原因我不知道(但想想记住Nimbus中的命名/子组件的查找被破坏),下面的设置都没有任何效果
UIManager.put("\"OptionPane.button\"[Default].font", ax);
UIManager.put("OptionPane:\"OptionPane.button\"[Default].font", ax);
此外,在将其设置为UIResource时,第二个按钮的自定义字体在翻转/聚焦时会丢失。一个hackaround是不将其设置为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时创建的,对单个实例没有持久影响。