Java 如何在JLabel中插入JPanel?

Java 如何在JLabel中插入JPanel?,java,swing,jpanel,jlabel,imageicon,Java,Swing,Jpanel,Jlabel,Imageicon,我正在为某种文件选择器编写一个自定义jlist单元格渲染器。我的问题是,当我读取ImageIcon时,它似乎具有尺寸(-1,-1),因此无法正确调整其大小。这幅画是一种简单的纹理(木头、金属等)。 然后我想,如果我添加一个JPanel而不是一个图像,然后将图像添加到面板中,我甚至不必调整图片的大小 我有两种可能: 从硬盘读取图像图标,使其不具有尺寸-1,-1 将JPanel插入JLabel中 这是我的列表单元格的预览 这是我的自定义渲染器,它将图标添加到单元格中 class IconListR

我正在为某种文件选择器编写一个自定义jlist单元格渲染器。我的问题是,当我读取ImageIcon时,它似乎具有尺寸(-1,-1),因此无法正确调整其大小。这幅画是一种简单的纹理(木头、金属等)。 然后我想,如果我添加一个JPanel而不是一个图像,然后将图像添加到面板中,我甚至不必调整图片的大小

我有两种可能:

  • 从硬盘读取图像图标,使其不具有尺寸-1,-1
  • 将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;
        }
    }
    
    类IconListRenderer扩展了DefaultListCellRenderer{ 私有地图图标=空; 公共图标列表渲染器(地图图标){ 这个图标=图标; } @凌驾 公共组件GetListCellRenderComponent( JList列表、对象值、整数索引、, 布尔值(已选择,布尔单元格已聚焦){ //从父类获取渲染器组件 JLabel标签= (JLabel)super.getListCellRenderComponent(列表, 值、索引、isSelected、cellHasFocus); ImageIcon图标=(ImageIcon)icons.get(值); //设置要为值显示的图标 label.setIcon(图标); label.setText(value.toString()); 退货标签; } }
    只要用面板替换标签即可


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

    实际上,我不太明白问题是什么:渲染器中的(缩小)大小还是右侧预览中的(调整大小)大小?