通过实现接口ListCellRenderer自定义JList的显示模式

我由.net转过来的,在.net中的控件ListView显示方式有三种,可以很简单的显示图标和文字,使用起来很方便,效果也不错。

转到java后,JAVA里的JList和.net里的ListView有很大不同,感觉用起来真的不方便。经过几天的研究,最后总算是把效果做出来了。效果如下图


如上图,在JList中显示图片,图片下面显示文字,文字居中显示。

为了实现上面的效果,我写了一个继承JLabel并实现了ListCellRenderer接口类,上代码如下

public class CellRenderer extends JLabel implements ListCellRenderer {

    /*从这里到结束:实作getListCellRendererComponent()方法*/
    @Override
    public Component getListCellRendererComponent(JList list,
            Object value,
            int index,
            boolean isSelected,
            boolean cellHasFocus) {
        String uri = "file:/fake.svg";
        CellInfo ci = (CellInfo) value;
        setHorizontalAlignment(JLabel.CENTER);
        try {
            Icon icon = new ImageIcon(ci.bi);
            this.setIcon(icon);
            this.setText(ci.iconName);
        } catch (Exception e) {            
            this.setIcon(null);
            this.setText(String.valueOf(index));
        }
        return this;
    }
}

上面的CellInfo类只有两上字段,图片 bi,和文本iconName。在JList中要设置setCellRenderer为上面的类实例

        cellRenderer = new CellRenderer(color, 50);
        list.setCellRenderer(cellRenderer);
接下来只要在代码里用setModel将数据添加到JList里就可以了

    private void resetList() {
            for (int i = 0; i < oSizes.size(); i++) {
                dlm.addElement(new CellInfo(img, str));
            }
            list.setModel(dlm);
        }
    }

还有一些设置在JList里设置就可以了,比如每一项的尺寸,间距等。这里就不再详讲了。

上面的代码可以在我的一个开源项目中找到,详细可以看这里 APP图标神器

APP图标神器是使用网阿里图标库或使用一个SVG字体图标库来生成APP图标的应用。可以分类生成安卓各种分辨率的图标。

程序写的有些粗糙,还凑和能用,希望你能喜欢。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

平平定

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值