2012-11-19 37 views
2

我有一個棘手的問題與此代碼:的Java JComboBox的着色,直到聚焦丟失

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

非常感謝你的幫助並提前思考!

回答

1

我找到了我的答案...我只是不得不寫 box.transferFocusUpCycle(); 在ActionPerformed方法

因此,他失去了重點重新選擇項目,如第2步。 感謝您的建議反正!最好的Andrea