Не могу использовать ListCellRenderer - PullRequest
0 голосов
/ 04 декабря 2009

Я использую Netbeans для разработки своего Java-приложения. Я хочу отобразить список элементов с иконками. Я использую ListCellRendere r, но он просто отображает элемент, а не значок. Вот мой код

// Класс изделия

public class Item {
  private String title;
  private String imagePath;
  private ImageIcon image;
  //getter and setter}

// ItemRenderer

public class ItemRenderer  extends JLabel implements ListCellRenderer{

  private static final Color HIGHLIGHT_COLOR = new Color(0, 0, 128);

  public ItemRenderer() {
    setOpaque(true);
    setIconTextGap(12);
  }
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus)
{   try
    {
        Item  item = (Item)value;
        System.out.println("hhhhhhhhhhhhhhhhhhhhhhhhh" + item.getTitle() + ";icon=" + item.getImagePath());
        setText(item.getTitle());
        setIcon(item.getImage());

        if (isSelected)
        {
          setBackground(HIGHLIGHT_COLOR);
          setForeground(Color.white);
        }
        else
        {
          setBackground(Color.white);
          setForeground(Color.black);
        }
    }
    catch(UnsupportedOperationException ex)
    {
        throw new UnsupportedOperationException("Not supported yet.");
    }
    return this;
}

// и вот мой код для использования ListCellRenderer

 public frmMain() {
    initComponents();

    DefaultListModel model = new DefaultListModel();

    Item [] items = null;
    items = new Item[5];

    for(int i=0;i<5;i++)
    {
        items[i] = new Item();
        items[i].setTitle("Item " + i);
        items[i].setImagePath("pdf-gif.gif");

        model.addElement(items[i]);
    }

    lstLeftItems.setModel(model);

    lstLeftItems.setCellRenderer(new ItemRenderer());
    lstLeftItems.setVisibleRowCount(5);


}

Примечания: lstLeftItems - это Jlist.

Пожалуйста, помогите мне исправить эту ошибку.

Ответы [ 2 ]

1 голос
/ 04 декабря 2009

Исходя из предоставленного вами кода, значок является нулевым. Я вижу, где вы устанавливаете заголовок и imagePath, но вам нигде не нужно читать файл изображения, чтобы создать иконку.

Если вам нужна дополнительная помощь, опубликуйте свой SSCCE , чтобы мы могли увидеть реальную проблему.

0 голосов
/ 04 декабря 2009

Спасибо за ваш ответ. Я не установил изображение из-за моего метода получения для атрибута изображения Вот мой код

 public ImageIcon getImage() {

    if(image==null)
    {
        image = new ImageIcon(imagePath);
    }
    return image;
}

Итак, достаточно установить imagePath.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...