Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
所选项目的Java JCombobox着色在焦点丢失之前不会更新_Java_Swing_Jcombobox_Listcellrenderer - Fatal编程技术网

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

所选项目的Java JCombobox着色在焦点丢失之前不会更新,java,swing,jcombobox,listcellrenderer,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

我对该代码有一个难题:

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);
    }
}
public类StatusAndPersonPanel实现ActionListener{
私人JPanel myPanel;
私有字符串[]状态={“好”、“坏”、“不太坏”};
私有颜色[]背景={Color.GREEN,Color.RED,Color.ORANGE};
私人JComboBox;
公共comboxConstructor(){
myPanel=newjpanel();
box=新的JComboBox(状态);
ComboBoxRenderer myBackgrounds=新的ComboBoxRenderer(框);
设置颜色(背景);
myBackgrounds.SetString(状态);
框。设置渲染器(myBackgrounds);
box.addActionListener(这个);
颜色选择颜色=(颜色)背景[box.getSelectedIndex()];
框.立根背景(选择颜色);
myPanel.add(box);//将其放入我的面板
}
@凌驾
已执行的公共无效操作(操作事件){
颜色选择颜色=(颜色)背景[box.getSelectedIndex()];
框.立根背景(选择颜色);
}
}
如图所示,在步骤1中,所有颜色都按照我的要求制作, 但是现在我点击“没有那么糟糕”,选择正确后,
JComboBox
会折叠,但不会改变颜色(箭头会改变,我不知道为什么),直到我的焦点丢失(第3步,点击另一个`JPanel元素),颜色才被正确指定

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

非常感谢您事先的帮助和想法

A使用单个单元格显示。您可以在
列表单元格渲染器中更改颜色,如中所示


附录:相关的例子可以在这里找到。

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

因此,他松开焦点,重新绘制所选项目,如步骤2所示。 无论如何,谢谢你的建议!最佳安德里亚酒店