首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ListCellRenderer每次添加新标签?

ListCellRenderer每次添加新标签?
EN

Stack Overflow用户
提问于 2012-11-09 10:11:49
回答 2查看 218关注 0票数 2

我写了我自己的ListCellRenderer (下面的代码),它使我的单元格透明。现在如果我运行这个,每次我点击一个列表项目,它就会变得比以前更白。会不会是,JList总是添加我创建的这个新的JLabel,并覆盖上一个?

代码语言:javascript
复制
    jListPriority.setOpaque(true);
        jListPriority.setBackground(new Color(255, 255, 255, 10));
        jListPriority.setBorder(BorderFactory.createLineBorder(new Color(250, 250, 250)));

        jListPriority.setCellRenderer(new ListCellRenderer() {

                private JLabel label = new JLabel();

                public Component getListCellRendererComponent(JList list, Object value,   
                                 int index, boolean isSelected, boolean cellHasFocus) {

                    label.setOpaque(true);
                    label.setText(value.toString());
                    label.setForeground(new Color(250, 250, 250));
                    label.setFont(new Font("Lucida Grande", Font.PLAIN, 13));
                    label.setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, new Color(250, 250, 250, 50)));
                    label.setPreferredSize(new Dimension(label.getPreferredSize().width, label.getPreferredSize().height + 3));

                    if (isSelected) {
                        label.setBackground(new Color(255, 255, 255, 20));
                    } else {
                        label.setBackground(new Color(255, 255, 255, 10));
                    }

                    return label;
                }
            });
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-09 10:19:21

Graphics2D的默认组合使用AlphaComposite.SRC_OVER规则,因此结果是预期的。你需要为你想要的效果指定一个合适的模式。您可能会从这个example中获得一些想法。

票数 3
EN

Stack Overflow用户

发布于 2012-11-09 12:45:22

我认为你不想创建太多的jlabel实例。在您的示例中,您将为get的每次调用创建一个jlabel实例...方法只是将变量标签转换为字段。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13301139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档