首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实现ListCellRenderer

实现ListCellRenderer
EN

Stack Overflow用户
提问于 2014-11-20 20:59:36
回答 1查看 1.3K关注 0票数 0

我被困在实现ListCellRenderer上了。这是我的密码。

我从DB获得的数据以如下所示的域类的形式显示:

代码语言:javascript
复制
public class Domain {

    private Integer id;
    private String naziv;
    private Integer status;

    public Domain(){}

    public Integer getId() {return id;}
    public void setId(int i){id = i;}

    public String getNaziv(){return naziv;}
    public void setNaziv(String n){naziv = n;}

    public Integer getStatus(){return status;}
    public void setStatus(int s){status = s;}
}

设置JList:

代码语言:javascript
复制
        DefaultListSelectionModel m = new DefaultListSelectionModel();
        m.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        m.setLeadAnchorNotificationEnabled(false);
        DefaultListModel<String> modelRN = new DefaultListModel<String>();
        JScrollPane scrollPane = new JScrollPane();
        scrollPane.setBounds(10, 86, 390, 199);
        contentPane.add(scrollPane);
        JList<String> listRN = new JList<String>(modelRN);
        scrollPane.setViewportView(listRN);
        listRN.setBorder(new TitledBorder(null, "", TitledBorder.LEADING, TitledBorder.TOP, null, null));
        listRN.setSelectionModel(m);

这就是我如何填充列表的方式:

代码语言:javascript
复制
        dRN = new DBdomain(s,a,b).Conn();
        for(int i=0;i<dRN.size();i++){
        modelRN.addElement(dRN.get(i).getNaziv()); 

其中dRN = ArrayList<Domain>

所以问题是这个。我正在用字符串填充列表,这些字符串是Domain.getNaziv(),但我希望更改Domain.getStatus()具有特定值的列表中的背景。我知道我需要实现这样的东西:

代码语言:javascript
复制
public class MyListCellRenderer extends DefaultListCellRenderer {
         @Override
         public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
             Component c = super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
             // do something
             return c;
         }
    }

问题是,我不是用域填充Jlist,而是使用域字段(它是一个字符串),因此getListCellRendererComponent中的value参数看不到已归档状态,因此我不知道如何标记要更改其背景的字段。

希望我提供了所有的信息,有人可以指出我的正确方向。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-20 21:16:14

问题是我没有用域填充Jlist

很好地使用域填充JList。也许是这样的:

代码语言:javascript
复制
public class MyListCellRenderer extends DefaultListCellRenderer {

    @Override
    public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
        Component cell = null;

        if (value instanceof Domain) {
            Domain domain = (Domain)value;
            int status = domain.getStatus();
            String naziv = domain.getNaziv();

            cell = super.getListCellRendererComponent(list, 
                naziv, // note this...
                index, 
                isSelected, 
                cellHasFocus);

            if (status > 0) { // or whatever...
                cell.setBackground(STATUS_ON_COLOR);
            } else {
                cell.setBackground(STATUS_OFF_COLOR);
            }
        }
    }

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

https://stackoverflow.com/questions/27049473

复制
相关文章

相似问题

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