【问题标题】:Java JCombobox coloring of selected item not updated until focus lost选定项目的 Java JCombobox 着色在焦点丢失之前不会更新
【发布时间】:2012-11-19 01:10:51
【问题描述】:

我对这段代码有一个难题:

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 中所示相同。

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

【问题讨论】:

    标签: java swing jcombobox listcellrenderer


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      因此他失去焦点并重新绘制所选项目,如步骤 2 中所示。 无论如何感谢您的建议!最好的安德里亚

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-13
        • 2012-02-28
        • 1970-01-01
        • 1970-01-01
        • 2021-05-21
        • 2023-03-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多