变化的JComboBox色无渲染
问题描述:
我可以用改变组合框的背景色:变化的JComboBox色无渲染
UIManager.put("ComboBox.background", Color.RED);
和它的作品。
而是要改变[选择]装置技术领域,在看看Nimbus Defaults的属性被称为组合框: “ComboBox.listRenderer”[选择]装置技术领域,所以我试着用:
UIManager.put("ComboBox:\"ComboBox.listRenderer\"[Selected].background", Color.RED);
但它不起作用。
我想用渲染器(我已经尝试过,并将很多问题转化为长代码,我甚至没有自己写过,并且如果我以这种方式渲染组合框到JFileChoosers中是一个额外的问题) 。那么,有没有解决方案使用UIMAnager.put()来解决这个问题?
答
设置不同Color
,而不使用Nimbus defaluts
1 /单独的JComboBox
((JTextField) myJComboBox.getEditor().getEditorComponent())
#setBackground(Color.xxxx);
2/JFileChooser的
提取所有
JComponents
从JFileChooser
(化合物JComponents
)作为sugested here ,与所述的相同和JScrooPane
- 通过提取
safiest方式使用
NimbusDefalut
发现defalut建议从JFileChooser
所有JComponents
在以前的帖子有关here
3 /为
JTextField
和建议在我加上号码JComboBox's DropDown List
从defaluts为JList
,荧光笔供选择从JTable
编辑:
代码
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.plaf.basic.BasicComboPopup;
public class DisabledEditableCombo extends JFrame {
private static final long serialVersionUID = 1L;
private String comboList[] = (new String[]{"-", "London", "New York", "Sydney", "Tokyo"});
private JComboBox cmb = new JComboBox(comboList);
private JComboBox cmb1 = new JComboBox(comboList);
private JComboBox cmb2 = new JComboBox(comboList);
private JComboBox cmb3 = new JComboBox(comboList);
private JList list;
private JCheckBox checkBox = new JCheckBox("Combo enabled", false);
public DisabledEditableCombo() {
JLabel lbl = new JLabel("Editable JComboBox");
cmb.setEditable(true);
((JTextField) cmb.getEditor().getEditorComponent()).setDisabledTextColor(Color.red);
((JTextField) cmb.getEditor().getEditorComponent()).setBackground(Color.green);
cmb.setSelectedItem("Just Editable");
JLabel lbl1 = new JLabel("Non-Editable JComboBoxes");
//UIManager.put("ComboBox.disabledForeground", Color.red.darker().darker());
cmb1.setSelectedItem("Sydney");
cmb1.setRenderer(new DefaultListCellRenderer() {// ListCellRenderer
private static final long serialVersionUID = 1L;
@Override
public void paint(Graphics g) {
setBackground(cmb1.getBackground());
setForeground(Color.red);
super.paint(g);
}
});
cmb2.getEditor().getEditorComponent().setForeground(Color.blue);
((JTextField) cmb2.getEditor().getEditorComponent()).setDisabledTextColor(Color.red);
cmb2.setSelectedItem("London");
cmb3.setSelectedItem("Sydney");
checkBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
boolean selected = checkBox.isSelected();
cmb.setEnabled(selected);
cmb1.setEnabled(selected);
cmb2.setEnabled(selected);
cmb2.setEditable(!cmb2.isEnabled());
cmb2.setForeground(selected ? Color.blue : Color.red);
if (cmb2.getEditor() != null) {
((JTextField) cmb2.getEditor().getEditorComponent()).setDisabledTextColor(Color.red);
}
cmb3.setEnabled(selected);
Object child = cmb3.getAccessibleContext().getAccessibleChild(0);
BasicComboPopup popup = (BasicComboPopup) child;
list = popup.getList();
if (list != null) {
if (selected) {
list.setForeground(Color.blue);
} else {
list.setForeground(Color.red);
}
}
}
});
cmb.setEnabled(false);
cmb1.setEnabled(false);
cmb2.setEnabled(false);
cmb3.setEnabled(false);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setPreferredSize(new Dimension(300, 300));
setLocation(150, 100);
setLayout(new GridLayout(7, 0, 10, 10));
add(lbl);
add(cmb);
add(lbl1);
add(cmb1);
add(cmb2);
add(checkBox);
add(cmb3);
pack();
setVisible(true);
}
public static void main(String args[]) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
DisabledEditableCombo disabledEditableCombo = new DisabledEditableCombo();
}
});
}
}
到目前为止,我与解决方案#1的尝试,我得到一个错误。将'#'改为'。'它走了,但没有任何变化。无论如何,寻找改变背景,而不是选择的背景 –
@罗曼Rdgz请问问题出在哪里, – mKorbel
问题是第一个不起作用,第二个告诉我使用代码从我以前的问题,应该只修复JComboBox在FileChooser但不是其他人,第三个我只是不明白你要求我做什么。最后,我也不理解在编辑之后添加的代码:它旨在替换FileChooser外部的JComboBox?它被测试了吗? –