2

おはようございます。この ListCellRenderer クラスがコンボボックス セルに画像アイコンを設定しない理由を特定するのを手伝っていただけませんか。ListCellRenderer クラスは次のとおりです。

    class MyComboRendere implements ListCellRenderer {

    public Component getListCellRendererComponent(JList list, Object value,
            int index, boolean isSelected, boolean cellHasFocus) {

        JLabel label = new JLabel();
        label.setOpaque(true);
        label.setText(value.toString());
        label.setIcon(new ImageIcon("/pics/Color-icon.png"));
        if (isSelected)
            if (index == 0)
                label.setBackground(Color.RED);
            else if (index == 1)
                label.setBackground(Color.GREEN);
            else
                label.setBackground(Color.BLUE);
        return label;
    }

}

これはコンボボックスをセットアップする方法です:

public void setComboColor(){
    Vector<String> colors=new Vector<>();
    comboPanel=new JPanel(new BorderLayout());
    colors.add("RED");
    colors.add("GREEN");
    colors.add("BLUE");
    colorCombo=new JComboBox(colors);
    colorCombo.setRenderer(new MyComboRendere());
    comboPanel.add(colorCombo,BorderLayout.BEFORE_FIRST_LINE);
}
4

3 に答える 3

3

label.setIcon(new ImageIcon("/pics/Color-icon.png"));常に null を返すため、アイコンの実際のパスを取得していないようですが、例外はスローされません。だから私はこれを使用しようとしました:

java.net.URL imgURL = getClass().getResource("/pics/Color-icon.png");
label.setIcon(icon);

そしてそれは正常に動作します

于 2013-02-22T15:08:42.653 に答える
1
  1. XxxRenderer 内で FileIO を提供しない、すべてのアイコンをローカル変数にロードする、null 値をテストする

  2. XxxRenderer が多数のイベント (マウス、キー、および API で内部的に実装されたもの) を発生させた後、その場でアイコンを再作成しました。

  3. JComboBox に関する Oracle チュートリアルを読み、similair の問題に関するコード例を試してください。

于 2013-02-22T09:28:41.870 に答える
1
"/pics/Color-icon.png"

これは存在しますか?ImageIcon画像の読み込みに失敗しても例外はスローされませんが、null.

于 2013-02-22T09:26:33.350 に答える