2016-11-13 4 views
0

JListに3つのアイテム(オレンジ、リンゴ、バナナ)があり、それぞれのアイテムの画像をJLabelで表示するにはどうすればよいですか?ImageListをJListに割り当てる

private void jList2ValueChanged(javax.swing.event.ListSelectionEvent evt) {          
    // TODO adds your handling code here: 
    try { 
     if (evt.getSource() == "orange") { 
      ImageIcon icon = new ImageIcon("pic/rea.png" + jList2.getSelectedValue()); 
      jLabel2.setIcon(icon); 
     } 
    } catch (Exception e) { 
     //do nothing 
    } 
} 
+0

私はもっと大きなプロジェクトの一環としてこれをやっています。私は500 +のコードを持っていますが、私が立ち往生している唯一のビットは、私が解決しようとする日を検索した画像にリストの値を割り当てています実際のコードをポストするのではなく、ポストを長すぎることなく同じ目的を果たすためにこれを作ったのです! – jill

+0

何を試しましたか?エラーが発生していますか?期待どおりの結果ではありませんか? [デバッグ](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)を試しましたか?率直に言えば、これは "自分のコードを書く"のように思えます。スタックオーバーフローはプログラマフリーのサービスではありません。 –

+0

デバッグは動作しません。私はそれを試してみました。コードに何が間違っていたかを知っています。同じ変数をactionlistenerで2回使用したため、値が1つも表示されませんでした。 – jill

答えて

0

リストのCellRendererを設定する必要があります。例:

private void initGUI() { 
    Image orange = getOrangeImage(); 
    Image apple = getAppleImage(); 
    // ... 

    Map<String, Icon> icons = new HashMap<>(); 
    icons.put("orange", new ImageIcon(orange)); 
    icons.put("apple", new ImageIcon(apple)); 
    // ... 

    JList<String> list = new JList<>(new String[] { "orange", "apple", "banana" }); 
    list.setCellRenderer(new FruitRenderer(icons)); 
    // ... 
} 

class FruitRenderer extends DefaultListCellRenderer { 

    private final Map<String, Icon> icons; 

    FruitRenderer(Map<String, Icon> icons) { 
     this.icons = Objects.requireNonNull(icons); 
    } 

    @Override 
    public Component getListCellRendererComponent(JList<?> list, Object value, int index, 
      boolean isSelected, boolean cellHasFocus) { 

     Component comp = super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); 
     if (value instanceof String) { 
      Icon icon = icons.get(value); 
      ((JLabel) comp).setIcon(icon); 
     } 
     return comp; 
    } 
} 

注:DefaultCellListenerはJLabelを拡張し、各リストセルのレンダリングに使用されます。

注2:明らかに、アイコンのマップをレンダラーに渡す必要はありません。これは単なる例です。

関連する問題