【问题标题】:How do you change the size and font of a joptionpane?如何更改 joptionpane 的大小和字体?
【发布时间】:2015-01-10 21:30:15
【问题描述】:

你能改变 JOptionPane 文本的字体和大小吗?我试过了,只有当我在那个特定的 java 类上“运行文件”时它才有效。如果您启动整个项目,它不会更改字体。我只想更改一个特定的 JOptionPane 而不是全部。

代码如下:

 UIManager.put("OptionPane.messageFont", new FontUIResource(new Font(  
          "Arial", Font.BOLD, 18)));       
 JOptionPane.showMessageDialog(null,"MESSAGE","ERROR",JOptionPane.WARNING_MESSAGE);         

【问题讨论】:

标签: java swing netbeans fonts joptionpane


【解决方案1】:

这真的很容易。 JOption 窗格不仅接受字符串,还接受组件。因此,您可以创建一个标签设置其字体并将其用作消息。

JLabel label = new JLabel("MESSAGE");
label.setFont(new Font("Arial", Font.BOLD, 18));
JOptionPane.showMessageDialog(null,label,"ERROR",JOptionPane.WARNING_MESSAGE);

我不明白为什么以前没有人回答这个问题

【讨论】:

  • 我试过了,但是,JLabel label = new JLabel(LONG MESSAGE \n MESSAGE \m hello"); 不能开始新行,但显示长行文本
  • @neo999 试试JLabel label = new JLabel("<html>LONG MESSAGE <br> MESSAGE <br> hello</html>");
  • 如何更改 JOptionPane 的标题栏字体大小?
  • @user3153014 请写下你自己的新问题。
  • 我有这个问题,我认为它很好,但不是最好的。我可以有一个JLabel,但我必须设置正确的换行大小等。如果我使用html标签,要显示的消息中的文本必须转义,我通常使用纯字符串传递消息并在之后转义拥有这个字符串是....不好。如果我构造一个JTextArea,我必须将背景设置为与默认对话框相同。如果我构造一个JPanel,我必须处理布局。工作量太大。
【解决方案2】:

这是我们应该使用的方式:

UIManager.getLookAndFeelDefaults().put("OptionPane.messageFont", new Font("Arial", Font.BOLD, 14)); UIManager.getLookAndFeelDefaults().put("OptionPane.buttonFont", new Font("Arial", Font.PLAIN, 12));

UIManager.put("OptionPane.messageFont", new Font("Arial", Font.BOLD, 14));
UIManager.put("OptionPane.buttonFont", new Font("Arial", Font.PLAIN, 12));

记得在出现任何 JOptionPane 对话框之前设置它。我只是把它放在 main 方法的第一行。

要了解我为什么这样做,UIManager 的文档总是有用的。

默认值

UIManager 管理三组 UIDefaults。按顺序,它们是:

开发人员默认设置。除了少数例外,Swing 不会更改开发人员的默认设置;这些旨在由开发人员修改和使用。

外观和感觉默认值。外观默认值由安装时的外观作为当前外观提供(调用 setLookAndFeel())。可以使用 getLookAndFeelDefaults() 方法获取外观默认值。

系统默认值。系统默认值由 Swing 提供。 调用任何各种 get 方法都会导致检查每个默认值,按顺序返回第一个非空值。例如,调用 UIManager.getString("Table.foreground") 会导致首先检查开发人员默认设置。如果开发人员默认值包含“Table.foreground”的值,则返回它,否则检查外观默认值,然后检查系统默认值。 请务必注意,getDefaults 返回 UIDefaults 的自定义实例,其中内置了此解析逻辑。例如,UIManager.getDefaults().getString("Table.foreground") 等价于 UIManager.getString("Table.foreground")。两者都使用刚刚描述的算法解决。在许多地方,文档使用单词 defaults 来指代具有解析逻辑的 UIDefaults 的自定义实例,如前所述。

所以,我们应该首先更改开发人员的默认设置。而UIManager.put(Object key, Object value)这个方法就是要使用的方法。

public static Object put(Object key, Object value)

在开发人员默认值中存储一个对象。这是 getDefaults().put(key, value) 的一个覆盖方法。这只会影响开发人员的默认设置,而不是系统或外观默认设置。

参数:

key - 一个指定检索键的对象

value - 要存储的对象;有关如何处理 null 的详细信息,请参阅 UIDefaults

返回:UIDefaults.put(java.lang.Object, java.lang.Object)返回的Object

投掷:

NullPointerException - 如果键为空

这正是我要寻找的:没有额外的面板,也没有覆盖 JOptionPane 的默认 UI 的麻烦。

JOptionPane 中属性名称的完整列表在这里:

http://www.java2s.com/Tutorial/Java/0240__Swing/CustomizingaJOptionPaneLookandFeel.htm

Property String                                 Object Type

OptionPane.actionMap                            ActionMap
OptionPane.background                           Color
OptionPane.border                               Border
OptionPane.buttonAreaBorder                     Border
OptionPane.buttonClickThreshhold                Integer
OptionPane.buttonFont                           Font
OptionPane.buttonOrientation                    Integer
OptionPane.buttonPadding                        Integer
OptionPane.cancelButtonMnemonic                 String
OptionPane.cancelButtonText                     String
OptionPane.cancelIcon                           Icon
OptionPane.errorDialog.border.background        Color
OptionPane.errorDialog.titlePane.background     Color
OptionPane.errorDialog.titlePane.foreground     Color
OptionPane.errorDialog.titlePane.shadow         Color
OptionPane.errorIcon                            Icon
OptionPane.errorSound                           String
OptionPane.font                                 Font
OptionPane.foreground                           Color
OptionPane.informationIcon                      Icon
OptionPane.informationSound                     String
OptionPane.inputDialogTitle                     String
OptionPane.isYesLast                            Boolean
OptionPane.messageAnchor                        Integer
OptionPane.messageAreaBorder                    Border
OptionPane.messageFont                          Font
OptionPane.messageForeground                    Color
OptionPane.messageDialogTitle                   String
OptionPane.minimumSize                          Dimension
OptionPane.noButtonMnemonic                     String
OptionPane.noButtonText                         String
OptionPane.noIcon                               Icon
OptionPane.okButtonMnemonic                     String
OptionPane.okButtonText                         String
OptionPane.okIcon                               Icon
OptionPane.questionDialog.border.background     Color
OptionPane.questionDialog.titlePane.background  Color
OptionPane.questionDialog.titlePane.foreground  Color
OptionPane.questionDialog.titlePane.shadow      Color
OptionPane.questionIcon                         Icon
OptionPane.questionSound                        String
OptionPane.sameSizeButtons                      Boolean
OptionPane.separatorPadding                     Integer
OptionPane.setButtonMargin                      Boolean
OptionPane.titleText                            String
OptionPane.warningDialog.border.background      Color
OptionPane.warningDialog.titlePane.background   Color
OptionPane.warningDialog.titlePane.foreground   Color
OptionPane.warningDialog.titlePane.shadow       Color
OptionPane.warningIcon                          Icon
OptionPane.warningSound                         String
OptionPane.windowBindings                       Object[ ]
OptionPane.yesButtonMnemonic                    String
OptionPane.yesButtonText                        String
OptionPane.yesIcon                              Icon
OptionPaneUI                                    String

【讨论】:

    【解决方案3】:

    有一种简单的方法可以更改JOptionPane 中的默认字体。传递一个以html 格式修改的字符串,这意味着您可以使用<font> 标签甚至CSS。

    使用<font> 标签。

    JOptionPane.showMessageDialog(this, 
            "<html><font face='Calibri' size='15' color='red'>Hello");
    

    使用 CSS。

    JOptionPane.showMessageDialog(this, 
            "<html><h1 style='font-family: Calibri; font-size: 36pt;'>Hello");
    

    【讨论】:

      【解决方案4】:

      我检测到在 NIMBUS L&F 中最初没有设置“messageFont”(UIManager.get("OptionPane.messageFont") == null)。

      因此,如果您想从默认字体派生新字体(/font-size),您可以使用键“OptionPane.font”代替(--> UIManager.get("OptionPane.font")),它显然永远不会返回 null。然后使用键“OptionPane.messageFont”设置派生字体。

      【讨论】:

        猜你喜欢
        • 2015-10-22
        • 1970-01-01
        • 2011-06-14
        • 1970-01-01
        • 2017-05-09
        • 2021-06-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多