2

私はこのコードで難しい問題を抱えています:

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に示したものと同じです。

画像

よろしくお願いします!

4

2 に答える 2

2

Aは、すべてのセルに対してJComboBox単一のレンダラーを使用して表示されます。ListCellRendererに示すように、の色を変更できますCustomComboBoxDemo

補遺:関連する例は、このQ&Aにあります。

于 2012-11-19T02:06:06.547 に答える
1

私は自分の答えを見つけました...私はbox.transferFocusUpCycle();を書く必要がありました。ActionPerformedメソッドで

そのため、彼はフォーカスを失い、ステップ2のように選択したアイテムを塗り直します。とにかくアドバイスをありがとう!最高のアンドレア

于 2012-11-19T23:15:42.513 に答える