我研究並試圖從包含發佈者對象的數組列表動態地填充jcombobox。我試圖實現渲染器,以便使用getName()方法顯示發佈者名稱。組合框顯示程序運行時的名稱,但是,如果新的發佈服務器隨後被添加到ArrayList中,則組合框將變爲空白。使用自定義渲染器在jComboBox中顯示值的錯誤
創建型號:
public class PublisherComboBoxModel implements ComboBoxModel{
protected List<Publisher> publishers;
public PublisherComboBoxModel(List<Publisher> list) {
this.listeners = new ArrayList();
this.publishers = list;
if(list.size() > 0) {
selected = list.get(0);
}
}
protected Object selected;
@Override
public void setSelectedItem(Object item) {
this.selected = item;
}
@Override
public Object getSelectedItem() {
return this.selected;
}
@Override
public Object getElementAt(int index) {
return publishers.get(index);
}
@Override
public int getSize() {
return publishers.size();
}
protected List listeners;
@Override
public void addListDataListener(ListDataListener l) {
listeners.add(l);
}
@Override
public void removeListDataListener(ListDataListener l) {
this.listeners.remove(l);
}
}
創建渲染:
jComboBoxPublisher.setModel(publisherComboModel);
jComboBoxPublisher.setRenderer(new DefaultListCellRenderer() {
@Override
public Component getListCellRendererComponent(JList list,
Object value,
int index,
boolean isSelected,
boolean cellHasFocus) {
Publisher publisher = (Publisher)value;
if(value!=null)
{
value = publisher.getName();
}
return super.getListCellRendererComponent(list, value,
index, isSelected, cellHasFocus);
}
當您將一個新的'Publisher'添加到列表中時,您是否可以演示此問題... – MadProgrammer
@MadProgrammer嗨,我已編輯帖子以顯示該問題。 – Zak
您是否有可重現此問題的可運行示例? (我們可以玩) – MadProgrammer