Java 如何在JLabel中插入JPanel?
我正在为某种文件选择器编写一个自定义jlist单元格渲染器。我的问题是,当我读取ImageIcon时,它似乎具有尺寸(-1,-1),因此无法正确调整其大小。这幅画是一种简单的纹理(木头、金属等)。 然后我想,如果我添加一个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
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
实际上,我不太明白问题是什么:渲染器中的(缩小)大小还是右侧预览中的(调整大小)大小?