2011-01-27 3 views
0

HI、私はJLISTを持っていて、それにcellRendererを割り当てました。しかし、私はリストの要素を選択することができませんでした。実際には選択されていますが、視覚的には選択されていることがわかりません。リスト内で選択されている項目が表示されていないことを意味します。私のリストのスウィングでリスト選択が行われていない

スクリーンショット: enter image description here

、何が期待されて第2のスクリーンショットはCellRendererのなしで enter image description here

です。しかし、CellRendererを追加すると、選択したアイテムがリストに表示されませんでした。

CellRendererをリストに追加すると、通常の動作になります。

何が間違っていますか?

EDIT: -

これは私のCellRendererクラスです:

public class ContactsRender extends JLabel implements ListCellRenderer { 

    private static final long serialVersionUID = 1L; 

    ImageIcon img; 

    public ContactsRender(){ 
     setOpaque(true); 
     setIconTextGap(12); 
     setBackground(Color.WHITE); 
     setForeground(Color.black); 
    } 

    @Override 
    public Component getListCellRendererComponent(JList list, 
      Object value, int index, boolean isSelected, 
      boolean cellHasFocus) { 
     if(value != null){ 
      User user = (User) value; 
      String pres = user.getPresence().toLowerCase(); 
      if(pres.contains("unavailable")){ 
       img = new ImageIcon("res/offline.jpg"); 
      } else { 
      img = new ImageIcon("res/online.jpg"); 
      } 
      setText(user.getName()); 
      setIcon(img); 

      return this; 
     } 
     return null; 
    } 

答えて

2

あなたは間違って自分のセルレンダリングを実装しました。レンダラーは、レンダラーの背景を選択色に設定します。

JList APIを読んで、JListを使用する実例を見つけるための「How to Use Lists」のSwingチュートリアルへのリンクに従ってください。また、レンダラーとサンプルの作成に関するセクションもあります。

編集:レンダラーコードでアイコンを読んでいることに気付きました。あなたは決してこれを行うべきではありません。レンダラーが作成され、アイコンがキャッシュされると、アイコンは一度しか読み込まれません。セルを再描画する必要があるたびに、レンダラーが呼び出されるので、アイコンを読み続けるのは効率的ではありません。

+0

私の質問に私のCellRendererクラスを追加しました。あなたは私が間違っていることを見つけるのを助けることができますか? –

+0

レンダラーの背景を設定しません。 isSelected変数をチェックし、背景を適切に設定する必要があります。チュートリアルには実例があります。時間をかけてチュートリアルを読んでください。 – camickr

+0

thnx私はそれが働いた。 –

0

セルレンダラでは、isSelectedがtrueのケースを実装する必要があります。あなたのためListCellRenderer

Component getListCellRendererComponent(JList<? extends E> list, 
             E value, 
             int index, 
             boolean isSelected, 
             boolean cellHasFocus) 
{ 
if (!isSelected) doThis(index); 
else doThatForSelectedItem(index); 
} 
+0

thnxしかし、私の質問はなぜ "選択GUIが表示されません?最初のスクリーンショットを見てください。その中のアイテムが選択されていますが、そのアイテムは表示されません。どうして? CellRendererを使用しない2番目のスクリーンショットでは、選択を見ることができます。 –