2016-03-05 3 views
0

Я пытаюсь объединить два defaultListModels в java, чтобы затем установить эту модель в JList. Эта программа в основном добавляет и удаляет элементы из ShoppingCart с использованием графического интерфейса. Когда я нажимаю кнопку добавления, он не должен удалять элементы из shoppingCart, но добавлять к этому списку.Можно ли объединить два DefaultListModels?

Вот мой код из AddButton блока:

DefaultListModel booksToAdd = new DefaultListModel(); 
booksToAdd.addElement(availableBooks.getSelectedValuesList()); 

DefaultListModel booksAdded = new DefaultListModel(); 
booksAdded.addElement(shoppingCart.getModel()); 


// this is where it does not work. I know I cannot just add these two, but I need 
//some way to combine them. 

shoppingCart.setModel(booksAdded + booksToAdd); 

ответ

2

Основной ответ должен сделать что-то вроде ...

for (int index = 0; index < from.getSize(); index++) { 
    to.addElement(from.getElementAt(index)); 
} 

, которые могут быть обернуты в методе ...

protected static <T> void addTo(ListModel<T> from, DefaultListModel<T> to) { 
    for (int index = 0; index < from.getSize(); index++) { 
     to.addElement(from.getElementAt(index)); 
    } 
} 

, который упростит использование, что-то вроде ...

DefaultListModel booksToAdd = new DefaultListModel(); 
DefaultListModel booksAdded = new DefaultListModel(); 
//... 
DefaultListModel combined = new DefaultListModel(); 

addTo(booksToAdd, combined); 
addTo(booksAdded, combined); 

Теперь, если вы делаете такого рода вещи много, вы можете разработать свой собственный ListModel, которые либо взяли один или несколько ListModel сек через конструктор и добавили свои элементы к вашему и/или обеспечивать «добавить» метод сделай это. В любом случае основная идея остается той же.

+0

Спасибо, что работает! Только один вопрос, когда результаты вернутся, также дает мне что-то вроде строк [email protected] в результатах. Есть ли способ избавиться от этого? –

+0

Результат указывает на то, что вы используете метод объекта toString, как вы используете результирующий 'JList', чтобы он распечатывал это – MadProgrammer

Смежные вопросы