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

use*_*004 4 java swing look-and-feel nimbus

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

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

如果没有聚焦,我希望它们能够用正常的Nimbus样式绘制.

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

我错过了什么吗?谢谢!

mKo*_*bel 8

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<JComponent> {

    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);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,但恐怕这会做我想要避免的事情:也就是说,它消除了所有通常的 Nimbus 样式。我希望 JButton 保持正常大小、圆角、蓝色焦点边框等......我只希望它的主体在具有焦点而不是标准灰色渐变时填充黄色。 (2认同)