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

来源:互联网 发布:python图形界面开发 编辑:程序博客网 时间:2024/06/03 17:19

我由.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图标的应用。可以分类生成安卓各种分辨率的图标。

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

1 0
原创粉丝点击