回 帖 发 新 帖 刷新版面

主题:[讨论]请教JList问题

如何让JList的每个元素既包括图片,也包含字符串,就像QQ那个样子??

回复列表 (共3个回复)

沙发

1.使用JList的setCellRenderer方法。在CellRenderer里,制造既包括图片,也包含字符串的Component.
2.去学习完整的SWING教程或者至少要学完JLIST教程。

板凳

我试验着写了一个方法,成功了的。
public static void JComplexList() {
    class ImageAndText {
        private BufferedImage image = new BufferedImage(24, 24, BufferedImage.TYPE_INT_RGB);
        private Icon icon = new ImageIcon(image);
        private String text;
        private ImageAndText(Color color, String text) {
            Graphics g = image.getGraphics();
            g.setColor(color);
            g.fillRect(0, 0, image.getWidth(), image.getHeight());
            this.text = text;
        }
        public Icon getIcon() {
            return icon;
        }
        public String getText() {
            return text;
        }
    }
    Vector<ImageAndText> toDisplay = new Vector<ImageAndText>();
    for (int i = 0, max = 10; i < max; i++) {
        toDisplay.add(new ImageAndText(new Color(255 * i / max, 127, 0), "Color " + i));
    }
    JList list = new JList(toDisplay);
    class MyRenderer extends JPanel implements ListCellRenderer {
        private static final long serialVersionUID = 1L;
        JLabel left = new JLabel();
        JLabel right = new JLabel();
        public MyRenderer() {
            super.setLayout(new BorderLayout());
            add(left, BorderLayout.WEST);
            add(right, BorderLayout.CENTER);
            setBorder(BorderFactory.createRaisedBevelBorder());
        }
        @Override
        public Component getListCellRendererComponent(JList list,
                Object value, int index, boolean isSelected,
                boolean cellHasFocus) {
            ImageAndText thing = (ImageAndText) value;
            left.setIcon(thing.getIcon());
            right.setText(thing.getText());
            return this;
        }
    }
    list.setCellRenderer(new MyRenderer());
    JFrame f = new JFrame();
    f.add(list);
    f.pack();
    f.setLocationRelativeTo(null);
    f.setVisible(true);
}

3 楼

谢谢,我会了

我来回复

您尚未登录,请登录后再回复。点此登录或注册