如何更改 JOptionPane 的背景颜色?

Posted

技术标签:

【中文标题】如何更改 JOptionPane 的背景颜色?【英文标题】:How to change background color of JOptionPane? 【发布时间】:2012-02-22 07:26:57 【问题描述】:

我已将 JOptionPane 添加到我的应用程序中,但我不知道如何将背景颜色更改为白色?

`int option = JOptionPane.showConfirmDialog(bcfiDownloadPanel,
            new Object[]"Host: " + source, panel,
            "Authorization Required",
            JOptionPane.OK_CANCEL_OPTION,
            JOptionPane.PLAIN_MESSAGE
    );

    if (option == JOptionPane.OK_OPTION)                   `

【问题讨论】:

【参考方案1】:

在 nimbus 外观和感觉中,这些所有代码都不可用。

所以解决办法是,

UIManager.put("control", new Color(0, 0, 0));

这也称为“Dark Nimbus”,在你的主框架的 main 方法的顶部添加这个。 所以它会自动改变All JOptionPane的背景。

而且你也不能改变按钮背景

UIManager.put("OptionPane.buttonBackground", BLACK);

所以你应该使用,

UIManager.put("nimbusBase", new Color(0, 0, 0));

记住——但不幸的是,这段代码会改变你所有按钮等的背景。所以你必须将*.setBackground(...); 添加到所有其他对象。

如果你想改变 JOptionPane 的前景,你应该使用

UIManager.put("text", new Color(255, 255, 255));

不幸的是,这将改变您所有文本的前景。

所有这些代码都称为黑暗雨云。

如果您使用的是 nimbus,您可以尝试这些 UIManager 代码来自定义 nimbus 的外观。

UIManager.put("control", new Color(0, 0, 0));
UIManager.put("info", new Color(0, 0, 0));
UIManager.put("nimbusBase", new Color(0, 0, 0));
UIManager.put("nimbusAlertYellow", new Color(248, 187, 0));
UIManager.put("nimbusDisabledText", new Color(255, 255, 255));
UIManager.put("nimbusFocus", new Color(115, 164, 209));
UIManager.put("nimbusGreen", new Color(176, 179, 50));
UIManager.put("nimbusInfoBlue", new Color(66, 139, 221));
UIManager.put("nimbusLightBackground", new Color(0, 0, 0));
UIManager.put("nimbusOrange", new Color(191, 98, 4));
UIManager.put("nimbusRed", new Color(169, 46, 34));
UIManager.put("nimbusSelectedText", new Color(255, 255, 255));
UIManager.put("nimbusSelectionBackground", new Color(18, 134, 175));
UIManager.put("text", new Color(255, 255, 255));

您可以尝试这些代码。在我的项目中,nimbus 看起来像

但我始终建议使用“Flatleaf”(搜索 google“FlatLafLookAndFeel”或访问 jar.download.com”)。它是专业的,您可以全部更改为自己的。

【讨论】:

【参考方案2】:

UIManager.put("OptionPane.background", Color.WHITE); UIManager.getLookAndFeelDefaults().put("Panel.background", Color.WHITE);

在调用 JOptionPane 对话框之前添加此代码,例如:

UIManager.put("OptionPane.background", Color.decode("#3c6562"));
UIManager.getLookAndFeelDefaults().put("Panel.background", Color.decode("#3c6562"));
    
int input= JOptionPane.showConfirmDialog
(
   null,
   "Close the programm?",
   "Exit",
   JOptionPane.YES_NO_OPTION
 );

 if(input == 0)
 
    System.exit(0);
 

【讨论】:

【参考方案3】:

对于遇到与上图相同的问题的任何人,我找到/改编了一个解决方案。在我的系统上,我得到了这个结果,无论我是使用其他人发布的 UIManager 解决方案,还是制作了一个 JDialog 并使用了jd.getContentPane().setBackground(Color.white)。所以这是我想出的解决方法,您可以递归地遍历 JOptionPane 中的每个组件,并设置每个 JPanel 的背景颜色:

private void getComponents(Container c)

    Component[] m = c.getComponents();

    for(int i = 0; i < m.length; i++)

        if(m[i].getClass().getName() == "javax.swing.JPanel")
            m[i].setBackground(Color.white);

        if(c.getClass().isInstance(m[i]))
            getComponents((Container)m[i]);
    

在您希望弹出消息的代码中,类似于以下内容:

pane = new JOptionPane("Your message here", 
                JOptionPane.PLAIN_MESSAGE ,JOptionPane.DEFAULT_OPTION);
        getComponents(pane);
        pane.setBackground(Color.white);
        jd = pane.createDialog(this, "Message");
        jd.setVisible(true);

JOptionPane paneJDialog jd 之前创建的位置。希望这对遇到这个问题的人有所帮助。

【讨论】:

这是最好的回应【参考方案4】:

如果您遇到与 erik k atwood 相同的问题,请使用此代码。这样就解决了问题:

UIManager.put("OptionPane.background", Color.WHITE);
UIManager.getLookAndFeelDefaults().put("Panel.background", Color.WHITE);

【讨论】:

【参考方案5】:

使用类似这样的方法来更改仅针对这一消息显示而不是整个系统的背景颜色...

    Object paneBG = UIManager.get("OptionPane.background");
    Object panelBG = UIManager.get("Panel.background");
    UIManager.put("OptionPane.background", new Color(...));
    UIManager.put("Panel.background", new Color(...));

    int ret = messageBox(msg, null, (short)type);

    UIManager.put("OptionPane.background", paneBG);
    UIManager.put("Panel.background", panelBG);

【讨论】:

“messageBox()”方法是什么?【参考方案6】:

通过使用UIManager

 import javax.swing.UIManager;

 UIManager UI=new UIManager();
 UI.put("OptionPane.background",new ColorUIResource(255,0,0));
 UI.put("Panel.background",new ColorUIResource(255,0,0));

 UIManager UI=new UIManager();
 UI.put("OptionPane.background", Color.white);
 UI.put("Panel.background", Color.white);

 JOptionPane.showMessageDialog(null,"Text","SetColor",JOptionPane.INFORMATION_MESSAGE);

【讨论】:

请注意,这将更改所有实例的背景。 是否也可以添加我的自定义按钮?

以上是关于如何更改 JOptionPane 的背景颜色?的主要内容,如果未能解决你的问题,请参考以下文章

在Ubuntu里 可以任意更改“终端”背景颜色教程

自定义标签栏背景颜色。如何更改标签栏背景的颜色?

如何用js更改tr的背景颜色 新手求助

如何更改绘图背景颜色?

如何更改图像的背景颜色?

如何更改 UITableHeaderView 的背景颜色和文本颜色