Nimbus通常看起来很棒,但对于某些颜色组合,结果是非最佳的.在我的情况下,a的背景JPopupMenu不适合,这就是我想手动设置的原因.
我在Java 7上,有趣的是,Nimbus完全忽略了UIManager(像PopupMenu.background)中某些属性的设置.所以我唯一的选择是创建JPopupMenu该覆盖的子类paintComponent(...).我知道,那很讨厌,但至少它起作用了.
但是,如果你添加一个JMenu到另一个菜单,它嵌入它自己的实例,JPopupMenu我无法弄清楚如何用我自己的子类替换它.
即使PopupMenuUI为嵌入式实例分配自己也没有带来任何结果.如果直接从JPopupMenuoverriden paint(...)方法继承而被调用,但是,无论我做了什么,都没有绘制.如果继承的javax.swing.plaf.synth.SynthPopupMenuUI paint甚至没有被调用,结果就是我根本没有设置自己PopupMenuUI.
所以简单的问题是:如何JPopupMenu使用Nimbus作为L&F,在Java 7上调整一个或者(如果这更容易)的背景颜色?
编辑:代码示例
看一下下面的代码和结果:
public static void main(final String[] args) {
try {
UIManager.setLookAndFeel(NimbusLookAndFeel.class.getCanonicalName());
UIManager.getLookAndFeelDefaults().put("PopupMenu.background", Color.GREEN);
UIManager.getLookAndFeelDefaults().put("Panel.background", Color.RED);
UIManager.getLookAndFeelDefaults().put("List.background", Color.BLUE);
} catch (ClassNotFoundException | InstantiationException
| IllegalAccessException | UnsupportedLookAndFeelException e) {
e.printStackTrace();
}
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(200,200);
JPanel panel = new JPanel(new BorderLayout());
panel.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));
JList …Run Code Online (Sandbox Code Playgroud) 在我的程序中,我希望在我的JFrame上有一个半透明的白色到透明渐变,以覆盖黄色背景.这工作正常,它需要是白色到透明,因为我的程序设置如何为用户工作.然而,当我把程序带入大学(JRE7到我的JRE6)时,渐变变成白色到黑色然后透明......直到你开始增加白色的不透明度就没那么糟了...无论如何我能解决这个问题?
这是我的JFrame代码顶部的相关代码.
public class DictionaryGUI extends JFrame
{
protected JPanel pGradientPane;
//Interface gradient specification
private Color pInterfaceColour = new Color(255, 245, 62);
protected int iDegreeWhite = 180
protected int iDegreeBlack = 0
DictionaryGUI(int iWidth, int iHeight)
{
/*General definitions*/
super(String.format("French Verb Conjugator - Version %s", MainLauncher.version));
setSize(iWidth, iHeight);
new Menu(this);
this.iWidth = iWidth;
this.iHeight = iHeight;
getContentPane().setBackground(pInterfaceColour);
pGradientPane = new JPanel(new GridBagLayout())
{
private static final long serialVersionUID = 1L;
protected void paintComponent(Graphics pGraphics)
{
Graphics2D pGraphicsGradientRender = (Graphics2D) pGraphics; …Run Code Online (Sandbox Code Playgroud) 这似乎应该是直截了当的,但我还没有找到一个"好"的方法来做到这一点......
在使用Swing Nimbus L&F时,我想让我的控件(JButtons,JTextField等)在焦点时呈现黄色背景色.除了黄色背景颜色,我希望它们保留所有常见的Nimbus造型.
如果没有聚焦,我希望它们能够用正常的Nimbus样式绘制.
我发现这样做的唯一方法是为每个控件重写控件 [Focused] .backgroundPainter(这相当于从头开始重写大部分Nimbus).
我错过了什么吗?谢谢!