所选项目的Java JCombobox着色在焦点丢失之前不会更新

时间:2012-11-19 01:10:52

标签: java swing jcombobox listcellrenderer

我对此代码有一个棘手的问题:

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元素”,颜色正确。

现在,我知道这只是一个小问题,但它让我发疯!我尝试使用ActionListenerItemListener(更改后)和FocusListener(焦点丢失和获得),但结果始终与步骤2中显示的相同。

image

非常感谢您的帮助和想法!

2 个答案:

答案 0 :(得分:2)

对所有单元格使用单个JComboBox显示renderer。您可以更改ListCellRenderer中的颜色,如CustomComboBoxDemo

所示

附录:相关示例可在此Q&A中找到。

答案 1 :(得分:1)

我找到了答案...我只需要写 box.transferFocusUpCycle(); 在ActionPerformed方法

所以他失去焦点,重新粉刷所选项目,如步骤2。 无论如何,谢谢你的建议!最好的安德里亚