使用Nimbus时,只有在控制有焦点时才将控制背景颜色设为黄色?

这似乎应该是直截了当的,但我还没有找到一个“好”的方法来做到这一点……

在使用Swing Nimbus L&F时,我想让我的控件(JButtons,JTextField等) 在焦点时呈现黄色背景色。 除了黄色背景颜色,我希望它们保留所有常见的Nimbus造型。

如果没有聚焦,我希望它们能够用正常的Nimbus造型绘制。

我发现这样做的唯一方法是为每个控件重写控件 [Focused] .backgroundPainter(这相当于从头开始重写大部分Nimbus)。

我错过了什么吗? 谢谢!

Nimbus Default为Nimbus外观提供简单的矩阵,但需要覆盖所有相关的鼠标和焦点事件,而不是覆盖…可能只是,

在此处输入图像描述在此处输入图像描述在此处输入图像描述

来自代码

import com.sun.java.swing.Painter; import java.awt.*; import javax.swing.*; public class NimbusJPanelBackGround { public NimbusJPanelBackGround() { JButton btn = new JButton(" Whatever "); JButton btn1 = new JButton(" Whatever "); JPanel p = new JPanel(); p.add(btn); p.add(btn1); JFrame f = new JFrame(); f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); f.add(p, BorderLayout.CENTER); f.pack(); f.setLocation(150, 150); f.setVisible(true); } public static void main(String[] args) { try { for (UIManager.LookAndFeelInfo laf : UIManager.getInstalledLookAndFeels()) { if ("Nimbus".equals(laf.getName())) { UIManager.setLookAndFeel(laf.getClassName()); UIManager.getLookAndFeelDefaults().put("Panel.background", Color.white); UIManager.getLookAndFeelDefaults().put("nimbusFocus", Color.blue); UIManager.getLookAndFeelDefaults().put("Button[Focused+MouseOver].backgroundPainter", new FillPainter(new Color(127, 255, 191))); UIManager.getLookAndFeelDefaults().put("Button[MouseOver].backgroundPainter", new FillPainter(new Color(127, 255, 191))); } } } catch (Exception e) { e.printStackTrace(); } EventQueue.invokeLater(new Runnable() { @Override public void run() { NimbusJPanelBackGround nimbusJPanelBackGround = new NimbusJPanelBackGround(); } }); } } class FillPainter implements Painter { private final Color color; public FillPainter1(Color c) { color = c; } @Override public void paint(Graphics2D g, JComponent object, int width, int height) { g.setColor(color); g.fillRect(0, 0, width - 1, height - 1); } }