Вопрос

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

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

  1. прочитайте имиконт с жесткого диска, чтобы у них нет измерения -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;
        }
    }
    
    .

Это было полезно?

Решение

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top