我对此代码有一个棘手的问题:
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中显示的相同。
非常感谢您的帮助和想法!
答案 0 :(得分:2)
对所有单元格使用单个JComboBox
显示renderer。您可以更改ListCellRenderer
中的颜色,如CustomComboBoxDemo
。
附录:相关示例可在此Q&A中找到。
答案 1 :(得分:1)
我找到了答案...我只需要写 box.transferFocusUpCycle(); 在ActionPerformed方法
中所以他失去焦点,重新粉刷所选项目,如步骤2。 无论如何,谢谢你的建议!最好的安德里亚