Как вставить JPanel в JLabel? - PullRequest
3 голосов
/ 08 марта 2012

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

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

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

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

enter image description here

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

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;
    }
}

1 Ответ

3 голосов
/ 08 марта 2012

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

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

...