0

他の場所のデータと「一致」した JList 内のすべての行を強調表示し、その行を無効にしようとしています。デバッグすると、cbNameIsMatched 内に正しいデータが設定されていることがわかります。ただし、最初の一致を作成した後、「一致した」インデックスを持つ行ではなく、JList で選択した各行が強調表示されます。またsetEnabled、リストの最後からリスト内をクリックするまでのすべての項目の設定です。

class MyListCellRenderer extends JLabel implements ListCellRenderer
        {
            public MyCopybookListCellRenderer()
            {
                setOpaque(false);
            }

            @Override
            public Component getListCellRendererComponent(JList paramList, Object value,
                    int index, boolean isSelected, boolean cellHasFocus) 
            {
                setText(value.toString());

                if(isSelected)
                {
                    setOpaque(true);
                }
                else
                {
                    setOpaque(false);
                }

                if(cbNameIsMatched[index]==2)
                {
                    setBackground(Color.YELLOW);
                    setEnabled(false);                      
                }

                myList.repaint();

                return this;
            }
4

2 に答える 2

1

ListCellRendererスタンプのように機能します。同じデータを持つ同じインスタンスが再利用されます。毎回正しい色を設定する必要があります。

if(cbNameIsMatched[index]==2)
{
    setBackground(Color.YELLOW);
    setEnabled(false);                      
}
else
{
    setBackground(your default color);
    setEnabled(true);                      
}
于 2014-05-23T13:28:26.620 に答える