[英]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循环将
Objects
的Arraylist
的项目中的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.