gpt4 book ai didi

java - 不可编辑的 JComboBox 中下拉控件和边框的颜色

转载 作者:搜寻专家 更新时间:2023-11-01 03:29:24 25 4
gpt4 key购买 nike

不可编辑的 JComboBox 中所选项目的背景颜色是一种蓝色:

alt text

我知道您可以将其更改为不同的颜色,例如白色,例如 following code :

jComboBox1.setRenderer(new DefaultListCellRenderer() {
@Override
public void paint(Graphics g) {
setBackground(Color.WHITE);
setForeground(Color.BLACK);
super.paint(g);
}
});

这给了你这样的东西:

alt text

但是,如果您双击该组合框,其中一些会变成灰色(带有三角形和边框的部分):

alt text

有没有办法阻止这些部分在双击时变成灰色?

请注意,如果您先调用 super.paint(),整个画面都会变暗(包括“Select...”后面的部分),所以这无济于事。

最佳答案

不确定 OP 到底想达到什么目的,但这是我的 JComboBox 着色配方:

static public void main(String[] args) {
JFrame window = new JFrame("Coloring ComboBox");
window.setSize(170, 150);
window.setLocationRelativeTo(null);
window.setLayout(null);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//---textArea is just for focus switching
JTextArea textArea = new JTextArea();
textArea.setBounds(5, 5, 140, 25);
window.add(textArea);

UIManager.put("ComboBox.selectionBackground", Color.magenta); //---focused background color
//---see comboBox's UIDefaults for more tweaks

JComboBox<String> coloredCombo = new JComboBox<String>(new String[]{"Dog", "Cat", "Bird"});
coloredCombo.setEditable(false);
coloredCombo.setUI(new BasicComboBoxUI() {
@SuppressWarnings({"serial"})
@Override
protected ComboPopup createPopup() {
return new BasicComboPopup(coloredCombo) {
{
//---style popup anyway you like
this.setBorder(BorderFactory.createLineBorder(Color.green, 2));//---popup's border color
}
};
}
@Override
protected JButton createArrowButton() {
//---style arrow button anyway you like
JButton result = new JButton();
result.setBackground(Color.orange);//---button's color
return result;
}
});

coloredCombo.setBorder(BorderFactory.createLineBorder(Color.red, 2));//---border color
coloredCombo.setBackground(Color.yellow); //---not focused background color

coloredCombo.setRenderer(new ListCellRenderer<String>() {
@Override
public Component getListCellRendererComponent(JList<? extends String> list, String value, int index,
boolean isSelected, boolean cellHasFocus) {
JLabel result = new JLabel(value);
result.setOpaque(true);
result.setBackground(isSelected ? Color.cyan : Color.blue); //---item background color
return result;
}
});
coloredCombo.setBounds(5, 35, 140, 25);
window.add(coloredCombo);

window.setVisible(true);
}

当然,这只是一个示例,我建议您创建一个精美的自定义类以供重用。 enter image description here

关于java - 不可编辑的 JComboBox 中下拉控件和边框的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4557533/

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