更改JOptionPane.showInputDialog中的默认字体的过程会产生混合结果

时间:2017-04-17 01:02:01

标签: java fonts

在70岁的时候,我决定学习Java,我必须说这项任务给了我很多挫折感。为了显示要选择的项目列表,我决定使用showInputDialog类的JOptionFrame选项,我发现只要将故障字体更改为通过这样调用UIManager来进行等宽:UIManager.put("List.font", new Font( "monospaced",Font.PLAIN,14));

问题是,每当我在我想要称为父框架的列表中插入列表时,这种情况就会停止使用返回其默认值的字体。我可以毫无问题地插入其他对象,但不能列出列表。我的问题是:我做错了什么?相关代码吼叫。

UIManager.put("List.font", new Font( "monospaced",Font.PLAIN,14));

String input = (String) JOptionPane.showInputDialog(null, 
        "World Exchanges",
        "Please select one", JOptionPane.QUESTION_MESSAGE, null, 
        choices, choices[0]); // Initial choice

1 个答案:

答案 0 :(得分:0)

我怀疑这是不一致的外观缓存行为的结果。 UIManager的javadocs说:

  

特定外观支持的默认值集由该外观定义和记录。此外,外观提供的每个外观或ComponentUI可以在其生命周期的不同时间访问默认值。某些外观可能会积极地查找默认值,因此在安装外观后更改默认值可能不起作用。其他外观可能会懒惰地访问默认值,以便更改默认值可能会影响现有的外观。最后,其他外观可能无法以任何方式从默认表中进行配置。尽管如此,通常情况下外观需要某些默认值,因此通常由一个外观提供的ComponentUI将无法使用另一种外观。

我的推荐(基于此)将是这个电话:

UIManager.put("List.font", new Font("monospaced", Font.PLAIN,14));
在选择外观(如果你这样做)后

在实例化任何Swing组件之前