gpt4 book ai didi

java - 使用 Nimbus,仅当控件具有焦点时才使控件背景颜色为黄色?

转载 作者:搜寻专家 更新时间:2023-11-01 01:45:52 27 4
gpt4 key购买 nike

这看起来应该很简单,但我还没有找到一个“好的”方法...

在使用 Swing Nimbus L&F 时,我想为我的控件(JButtons、JTextField 等)提供黄色背景色当它们具有焦点时。除了黄色背景颜色,我希望它们保留所有常用的 Nimbus 样式。

当没有聚焦时,我希望它们以正常的 Nimbus 样式绘制。

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

我错过了什么吗?谢谢!

最佳答案

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

enter image description here enter image description here enter image description here

来自代码

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);
}
}

关于java - 使用 Nimbus,仅当控件具有焦点时才使控件背景颜色为黄色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10787152/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com