私はこのコードで難しい問題を抱えています:
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要素をクリック)、色が適切に与えられます。
今、私はそれがほんの少しの化粧品の問題であることを知っています、しかしそれは私を夢中にさせます!ActionListener
、ItemListener
(変更後)、 (フォーカスが失われ、得られた)で試しましたFocusListener
が、結果は常に手順2に示したものと同じです。
よろしくお願いします!