JList设置样式ListCellRenderer

2021-12-01  本文已影响0人  开心的小哈
package com.main.list;

import javax.swing.*;
import java.awt.*;

public class ListCellRendererTest {
    public static void main(String [] age){
        new ListCellRendererTest().init();
    }
    public void init(){
        String imagePath[]={"1f432","1f433","1f434","1f435","1f436","1f437"};

        JFrame jf = new JFrame("ListCellRenderer");
        JList<String> friendsList = new JList<>(imagePath);
        //给JList设置ListCellReader
        friendsList.setCellRenderer(new MyRenderer());
        jf.add(friendsList);
        jf.pack();
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jf.setVisible(true);


    }
    private class MyRenderer extends JPanel implements ListCellRenderer{
        private String name;
        private ImageIcon icon;
        //记录背景色
        private Color backGround;
        //记录前景色
        private Color foreGround;
        @Override
        public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
           //重置成员变量
            this.name=value.toString();
            this.icon= new ImageIcon("img\\"+name+".png");
            this.backGround=isSelected? list.getSelectionBackground():list.getBackground();
            this.foreGround=isSelected? list.getSelectionForeground():list.getForeground();
            return this;
        }

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(60,80);
        }

        //绘制列表内容
        @Override
        public void paint(Graphics g) {
            int imageWidth=icon.getImage().getWidth(null);
            int imageHeight=icon.getImage().getHeight(null);
            //填充背景矩形
            g.setColor(backGround);
            g.fillRect(0,0,this.getWidth(),this.getHeight());
            //绘制头像
            g.drawImage(icon.getImage(),this.getWidth()/2-imageWidth/2,10,null);
            //绘制昵称
            //设置前景色
            g.setColor(foreGround);
            g.setFont(new Font("StSong",Font.BOLD,18));
            g.drawString(this.name,this.getWidth()/2-this.name.length()*10/2,10+imageHeight+20);
        }
    }

}

效果


屏幕截图(4).png
上一篇 下一篇

猜你喜欢

热点阅读