Как вставить JPanel внутрь JLabel?

Я пишу собственный модуль рендеринга ячеек jlist для какого-то средства выбора файлов. Моя проблема в том, что когда я читаю свой ImageIcon, кажется, что он имеет размер (-1,-1), поэтому я не могу правильно изменить его размер. На картинке простая фактура (дерево, металл и т.д.). Тогда я подумал, что если я добавлю JPanel вместо изображения, а затем добавлю изображение на панель, мне даже не придется изменять размер изображения.

У меня есть 2 возможности:

  1. Прочитайте ImageIcon с жесткого диска, чтобы они не имели размерность -1, -1
  2. Вставьте JPanel внутрь JLabel.

Вот предварительный просмотр ячеек моего списка.

введите здесь описание изображения

Вот мой пользовательский рендерер, который добавляет значки в ячейки.

class IconListRenderer extends DefaultListCellRenderer {

    private Map<Object, Icon> icons = null;

    public IconListRenderer(Map<Object, Icon> 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);

        ImageIcon icon = (ImageIcon)icons.get(value);
        // Set icon to display for value

        label.setIcon(icon);
        label.setText(value.toString());
        return label;
    }
}

person Pantaziu Cristian    schedule 08.03.2012    source источник
comment
на самом деле, я не совсем понимаю, в чем проблема: размер (уменьшенный) в рендерере или размер (хотя и измененный) в предварительном просмотре справа?   -  person kleopatra    schedule 08.03.2012


Ответы (1)


Просто замените этикетку панелью.

Вы можете использовать JPanel в качестве компонента рендеринга вместо JLabel.

person Peter    schedule 08.03.2012