我对这段代码有一个难题:
public class StatusAndPersonPanel implements ActionListener {
private JPanel myPanel;
private String[] status = {"Good", "Bad", "Not so bad"};
private Color[] backgrounds = {Color.GREEN, Color.RED, Color.ORANGE};
private JComboBox<String> box;
public ComboboxConstructor() {
myPanel = new JPanel();
box = new JComboBox<String>(status);
ComboBoxRenderer myBackgrounds = new ComboBoxRenderer(box);
myBackgrounds.setColors(backgrounds);
myBackgrounds.setStrings(status);
box.setRenderer(myBackgrounds);
box.addActionListener(this);
Color selectedColor = (Color) backgrounds[box.getSelectedIndex()];
box.setBackground(selectedColor);
myPanel.add(box); // putting it into my panel
}
@Override
public void actionPerformed(ActionEvent event) {
Color selectedColor = (Color) backgrounds[box.getSelectedIndex()];
box.setBackground(selectedColor);
}
}
正如你在图片中看到的,在步骤 1 中,所有颜色都是按照我想要的方式制作的,
但现在我点击“没那么糟糕”,JComboBox
会以正确的选择折叠,但不会改变颜色(箭头会改变,我不知道为什么),直到我的焦点是丢失(第 3 步,单击另一个“JPanel 元素”)颜色已正确给出。
现在,我知道这只是一个小小的外观问题,但它让我发疯!我尝试使用 ActionListener
、ItemListener
(更改后)和 FocusListener
(失去和获得焦点),但结果始终与如步骤 2 所示。
非常感谢您提前提供的帮助和想法!
最佳答案
一个JComboBox
使用单个 renderer 显示对于所有细胞。您可以更改 ListCellRenderer
中的颜色,如 CustomComboBoxDemo
中所示。 .
附录:相关例子可以在这个Q&A中找到.
关于所选项目的 Java JCombobox 着色在焦点丢失之前不会更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13446433/