简体   繁体   English

如何将项目从对象的ArrayList添加到JList。

[英]How to add Items from an ArrayList of Objects to a JList.

I want to add the toStrings from items in an Arraylist of Objects to a Jlist through a for loop. 我想通过for循环将ObjectsArraylist的项目中的toStrings添加到Jlist I tried this. 我试过了

for (int i = 0; i < customer.slist.size(); i++) {
        ((DefaultListModel) checkOutList.getModel()).addElement(customer.slist.toString());//slist is an array of objects.
    }

But it didnt work. 但是它没有用。 Also NetBeans tells me .addElement() is not a method for a JList when I tried 另外,NetBeans告诉我,当我尝试时, .addElement()不是JList的方法

checkOutList.addElement("anything")

instead of 代替

customer.slist.toString() customer.slist.toString()

try: 尝试:

customer.slist.get(i).toString(); customer.slist.get(i).toString();

in your code. 在您的代码中。

I have this implementation: 我有这个实现:

This is custom JList: 这是自定义的JList:

@SuppressWarnings("serial")
public class JListCustomered<T extends JListPresentedInterface> extends JList<T>{

private List<T> list;
private List<T> selectedList;

public JListCustomered(List<T> list){
    super();
    this.list=list;
    setCellRenderer(new JListRenderer());
    setModel(new ListModel());
}

public void loadData(List<T> list){
    getSelectedList().clear();
    this.list=list;
    setModel(new ListModel());
}


/** {@link JListCustomered#list} */
public List<T> getList() {
    if(list==null)
        list=new ArrayList<T>();
    return list;
}

/** {@link JListCustomered#selectedList} */
public List<T> getSelectedList() {
    if(selectedList==null)
        selectedList=new ArrayList<T>();
    return selectedList;
}


public class JListRenderer extends JLabel implements ListCellRenderer<T>{
    JSeparator separator;

    private JListRenderer(){
        separator=new JSeparator(JSeparator.HORIZONTAL);
        setOpaque(true);
    }

    /** @see javax.swing.ListCellRenderer#getListCellRendererComponent(javax.swing.JList, java.lang.Object, int, boolean, boolean) */
    public Component getListCellRendererComponent(JList<? extends T> list, T value, int index, boolean isSelected, boolean cellHasFocus) {
        if(value.isSeparator()){
             return separator;
        }

        List<T> selected = getSelectedList();
        if (isSelected) {
            if (!selected.contains(value)) {
                getSelectedList().add(value);
            }
            this.setBackground(getSelectionBackground());
        } else {
            if (selected.contains(value)) {
                getSelectedList().remove(value);
            }
            setBackground(Color.WHITE);
        }
        setFont(list.getFont());
        setText(value.getJListName());
        return this;
    }
}

private class ListModel implements javax.swing.ListModel<T>{

    /** @see javax.swing.ListModel#getSize() */
    public int getSize() {
        return getList().size();
    }

    /** @see javax.swing.ListModel#getElementAt(int) */
    public T getElementAt(int index) {
        return getList().get(index);
    }

    /** @see javax.swing.ListModel#addListDataListener(javax.swing.event.ListDataListener) */
    public void addListDataListener(ListDataListener l) {
    }

    /** @see javax.swing.ListModel#removeListDataListener(javax.swing.event.ListDataListener) */
    public void removeListDataListener(ListDataListener l) {
    }

}
}

below interface for object, which you want add to JList: 要添加到JList的对象的接口下面:

public interface JListPresentedInterface {

public String getJListName();
public boolean isSeparator();
}

you can reaload data on JList using method loadData , get selected list getList 您可以使用loadData方法在JList上重新加载数据,获取所选列表getList

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM