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

标签 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

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

最佳答案

一个JComboBox使用单个 renderer 显示对于所有细胞。您可以更改 ListCellRenderer 中的颜色,如 CustomComboBoxDemo 中所示。 .

附录:相关例子可以在这个Q&A中找到.

关于所选项目的 Java JCombobox 着色在焦点丢失之前不会更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13446433/

相关文章:

java - 使用 new 关键字从同一包内的类外部调用它时在框架内获取空文本区域

java - JSpinner 不允许用户输入内容

java - 我如何允许用户使用 JComboBox 更改他在 JTextPane 中的字体?

java - 保持交易状态

java - 使用 Jackson 忽略某些字段反序列化而不更改模型

java - 检测正在运行的 jar 文件的路径有效 - 但 BufferedWriter 写入 jarfilename.jarmyfile.txt

设置模型时Java JComboBox重置选择

java - 使用 Spring boot 和 Jackson 的日期时区

java - 如何在java中调整文本大小

java - 可编辑的 JComboBox