如何在JLabel中插入JPanel?

时间:2012-03-08 12:10:31

标签: java swing jpanel jlabel imageicon

我正在为某种filechooser编写自定义jlist单元格渲染器。我的问题是,当我读取我的ImageIcon时,它似乎有尺寸(-1,-1),所以我无法正确调整它。图片是简单的纹理(木材,金属等)。 然后我想如果我添加一个JPanel而不是一个图像,然后将图像添加到面板,我甚至不得不调整图片大小。

我有两种可能性:

  1. 从硬盘驱动器中读取ImageIcon,使它们没有尺寸-1,-1
  2. 在JLabel中插入JPanel。
  3. 这是我的列表单元格的预览。

    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 个答案:

答案 0 :(得分:3)

只需用面板替换标签即可。

您可以使用JPanel作为渲染组件而不是JLabel