【问题标题】:How to add Items from an ArrayList of Objects to a JList.如何将对象的 ArrayList 中的项目添加到 JList。
【发布时间】:2016-12-10 22:53:09
【问题描述】:

我想通过 for 循环将 ArraylistObjects 中的项目中的 toStrings 添加到 Jlist。我试过了。

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

但它没有工作。当我尝试时,NetBeans 告诉我.addElement()不是JList 的方法

checkOutList.addElement("anything")

【问题讨论】:

  • 我认为您需要在添加模型后再次设置模型......不过不记得了。有一段时间了……
  • @cricket_007,重置模型破坏了 MVC 设计的全部要点。每当模型中的数据发生更改时,模型应该通知已更改的视图,以便视图可以重新绘制自己。

标签: java swing arraylist


【解决方案1】:

而不是

customer.slist.toString()

尝试:

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

在您的代码中。

【讨论】:

    【解决方案2】:

    我有这个实现:

    这是自定义 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) {
        }
    
    }
    }
    

    下面的对象接口,你想添加到 JList:

    public interface JListPresentedInterface {
    
    public String getJListName();
    public boolean isSeparator();
    }
    

    您可以使用方法loadData重新加载JList上的数据,获取选定列表getList

    【讨论】:

    • 使用示例:private JListCustomered&lt;ColumnType&gt; listColumnsData;listColumnsData = new JListCustomered&lt;ColumnType&gt;(controller.getDataColumns());List&lt;ColumnType&gt; selectedList = listColumnsData.getSelectedList();listColumnsData.loadData(columns);
    猜你喜欢
    • 2012-01-05
    • 1970-01-01
    • 2021-03-19
    • 2012-03-19
    • 1970-01-01
    • 1970-01-01
    • 2015-02-07
    • 2021-12-20
    • 1970-01-01
    相关资源
    最近更新 更多