在Swing中设置JComboBox的背景

我想要一个没有箭头按钮(完成)的JComboBox,启用时具有绿色背景,禁用时具有灰色背景(未完成)。我还为下拉列表使用了自定义渲染器(完成)

我检查了BasicComboBoxUI的源代码,并尝试覆盖某些方法,但没有任何反应。下拉菜单始终具有灰色/蓝色背景。

这是我最后一次尝试的SSCCE。我尝试了所有我能想到的。请给我一个提示,我迷路了。

    import java.awt.Color;

import java.awt.Component;

import java.awt.Graphics;

import java.awt.Rectangle;

import javax.swing.BorderFactory;

import javax.swing.DefaultComboBoxModel;

import javax.swing.DefaultListCellRenderer;

import javax.swing.JButton;

import javax.swing.JComboBox;

import javax.swing.JComponent;

import javax.swing.JFrame;

import javax.swing.JList;

import javax.swing.JPanel;

import javax.swing.JScrollPane;

import javax.swing.SwingUtilities;

import javax.swing.plaf.basic.BasicComboBoxUI;

public class DropDownBackground

{

public static void main(final String[] args)

{

SwingUtilities.invokeLater(new Runnable()

{

public void run()

{

final JComboBox dropdown = new JComboBox(new DefaultComboBoxModel(new String[] { "one", "two", "three" }));

dropdown.setRenderer(new ComboBoxListCellRenderer());

dropdown.setUI(new BasicComboBoxUI()

{

@Override

public void paint(final Graphics g, final JComponent c)

{

final Rectangle r = this.rectangleForCurrentValue();

this.paintCurrentValueBackground(g, r, true);

this.paintCurrentValue(g, r, true);

}

@Override

public void paintCurrentValueBackground(final Graphics g, final Rectangle bounds, final boolean hasFocus)

{

final Color t = g.getColor();

if (this.comboBox.isEnabled())

g.setColor(Color.GREEN);

else

g.setColor(Color.GRAY);

g.fillRect(bounds.x, bounds.y, bounds.width, bounds.height);

g.setColor(t);

}

@Override

protected JButton createArrowButton()

{

return new JButton()

{

@Override

public int getWidth()

{

return 0;

}

};

}

});

dropdown.setBackground(Color.GREEN);

final JPanel p = new JPanel();

p.add(dropdown);

final JFrame f = new JFrame();

f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

f.getContentPane().add(new JScrollPane(p));

f.setSize(800, 200);

f.setLocation(0, 0);

f.setVisible(true);

}

});

}

public static class ComboBoxListCellRenderer extends DefaultListCellRenderer

{

/**

*

*/

private static final long serialVersionUID = 1L;

@Override

public Component getListCellRendererComponent(final JList list, final Object value, final int index, final boolean isSelected, final boolean cellHasFocus)

{

this.setToolTipText((String) value);

if (isSelected)

{

this.setBackground(Color.RED);

this.setForeground(Color.WHITE);

}

else

{

this.setBackground(Color.WHITE);

this.setForeground(Color.BLACK);

}

this.setText((String) value);

this.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));

return this;

}

}

}

回答:

由于我想让这个颜色应用程序更广泛,所以这是最好的方法:

UIManager.put("ComboBox.background", new ColorUIResource(UIManager.getColor("TextField.background")));

UIManager.put("ComboBox.foreground", new ColorUIResource(UIManager.getColor("TextField.foreground")));

UIManager.put("ComboBox.selectionBackground", new ColorUIResource(Color.GREEN));

UIManager.put("ComboBox.selectionForeground", new ColorUIResource(Color.WHITE));

如果要自定义更多(禁用的颜色等),则UIManager属性的此列表可能会很有用:http

:

//www.rgagnon.com/javadetails/JavaUIDefaults.txt

以上是 在Swing中设置JComboBox的背景 的全部内容, 来源链接: utcz.com/qa/411773.html

回到顶部