JList с изображением и текстом: откуда приходит текст из ArrayList <String> - PullRequest
1 голос
/ 07 августа 2011

У меня есть простой пример JList, который получает данные из ArrayList, но я хочу показать изображение рядом с каждой строкой в ​​списке.Я написал собственный рендерер ячеек (IconListRenderer), который должен отображать значок и объект из стороны в сторону.

Вот пример работы.

//Test class showing the list in a frame
import java.awt.Color;
import java.awt.Dimension;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import javax.swing.*;
import javax.swing.border.LineBorder;


public class Test extends JFrame{

     public static void main(String[] args) {


    final JFileChooser chooser = new JFileChooser();
    JButton button = new JButton();
    button.setText("Upload");
    JFrame frame = new JFrame("My Frame");
    JList list = new JList();
    Map<Object, ImageIcon> icons = new HashMap<Object, ImageIcon>();
    list.setBorder(new LineBorder(Color.BLACK));

    ImageIcon icon = new ImageIcon("/Images/400px-Greek_uc_sigma.png");

    ArrayList<String> arrayList = new ArrayList<String>();

    icons.put("Name", icon);

    //populate the arrayList for testing
    arrayList.add("Smith");
    arrayList.add("John");
    arrayList.add("Bob");
    arrayList.add("Kim");

    frame.setSize(new Dimension(400, 400));
    //set the list data
    list.setListData(arrayList.toArray());
    final JFrame imageFrame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


    list.setCellRenderer(new IconListRenderer(icons));
    frame.add(list); 
    frame.setVisible(true);
    frame.repaint();
}



}

// Класс IconListRenderer

import java.awt.Component;
import java.util.Map;
import javax.swing.DefaultListCellRenderer;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JList;


 public class IconListRenderer
                           extends DefaultListCellRenderer {

private Map<Object, ImageIcon> icons = null;

public IconListRenderer(Map<Object, ImageIcon> icons) {
    this.icons = icons;
}

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

    // Get the renderer component from parent class

    JLabel label =
        (JLabel) super.getListCellRendererComponent(list,
            value, index, isSelected, cellHasFocus);

    // Get icon to use for the list item value

    Icon icon = icons.get(value);

    // Set icon to display for value

    label.setIcon(icon);
    return label;
}
  }

В данный момент в списке нет изображения?

1 Ответ

2 голосов
/ 07 августа 2011

Это не удивительно:

  • вы используете значение элемента JList в качестве ключа, чтобы получить значок из карты значков;
  • карта значков содержит один ключ: "Имя "
  • " JList содержит "Смит", "Джон", "Боб" и "Ким", но без "Имя"
...