在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
答案 0 :(得分:0)
我怀疑这是不一致的外观缓存行为的结果。 UIManager
的javadocs说:
特定外观支持的默认值集由该外观定义和记录。此外,外观提供的每个外观或ComponentUI可以在其生命周期的不同时间访问默认值。某些外观可能会积极地查找默认值,因此在安装外观后更改默认值可能不起作用。其他外观可能会懒惰地访问默认值,以便更改默认值可能会影响现有的外观。最后,其他外观可能无法以任何方式从默认表中进行配置。尽管如此,通常情况下外观需要某些默认值,因此通常由一个外观提供的ComponentUI将无法使用另一种外观。
我的推荐(基于此)将是这个电话:
UIManager.put("List.font", new Font("monospaced", Font.PLAIN,14));
在选择外观(如果你这样做)后,在实例化任何Swing组件之前。