2016-12-10 20 views
0

ArraylistObjectsの項目のtoStringsを、forループを使用してJlistに追加したいとします。私はこれを試した。オブジェクトのArrayListからJListに項目を追加する方法。

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

しかし、それは動作しませんでした。 、オブジェクトのインターフェイス以下

@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のある

:また、NetBeansは.addElement()私は

checkOutList.addElement("anything") 
+0

モデルを追加した後でモデルを再設定する必要があると思います...しかし、思い出せません。しばらくして... –

+0

@ cricket_007、モデルをリセットすることで、MVC設計の全ポイントが敗北します。モデル内のデータが変更されると、モデルは変更されたことをビューに通知して、ビューが再描画できるようにします。使用の – camickr

答えて

0

をしようとしたとき、私はこの実装を持ってJListための方法ではない私に指示しますJListに追加したい:

public interface JListPresentedInterface { 

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

ATAのJListのメソッドloadDataを使用して、選択したリストgetList

+0

例: '民間JListCustomered listColumnsData;' ' listColumnsData =新しいJListCustomered (controller.getDataColumns());' ' 一覧 selectedList = listColumnsData.getSelectedList();' ' listColumnsData.loadData(コラム) ; ' – Victor1125

1

代わりの

customer.slist.toStringを(取得)

試してみてください。

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

関連する問題