【问题标题】:How do I insert a JPanel inside a JLabel?如何在 JLabel 中插入 JPanel?
【发布时间】:2012-03-25 22:09:27
【问题描述】:

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

我有两种可能:

  1. 从硬盘驱动器读取 ImageIcon,使它们没有尺寸 -1,-1
  2. 在 JLabel 中插入一个 JPanel。

这是我的列表单元格的预览。

这是我的自定义渲染器,它为单元格添加图标。

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

【问题讨论】:

  • 其实我不太明白问题出在哪里:渲染器中的(按比例缩小的)尺寸还是右侧预览中的(无论如何调整大小的)尺寸?

标签: java swing jpanel jlabel imageicon


【解决方案1】:

只需将标签替换为面板即可。

您可以使用JPanel 代替JLabel 作为渲染组件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-07
    相关资源
    最近更新 更多