2016-03-15 2 views
0

У меня есть 3 класса.
ImpAppModel:ArrayList в JList с использованием MVC

/* String array for saving members in the friendlist*/ 
public ArrayList<String> friendList = new ArrayList(10); 

/** 
* Method for retrieving elements (added friends) in the array for use in 
* GUI. 
* @return the elements in the ArrayList 
*/ 
public ArrayList friendList() { 
    //method filling the array with 1 testing record 
    friendList.add(1, "petr"); 
    return friendList; 
} 

Я просмотра appPanel класс (сгенерированный собрата NetBeans GUI Builder):

 Users.setModel(new javax.swing.AbstractListModel() { 
     String[] strings = {"User1", "User2", "User3", "User4", "User5"}; 

     @Override 
     public int getSize() { 
      return strings.length; 
     } 

     @Override 
     public Object getElementAt(int i) { 
      return strings[i]; 
     } 
    }); 
    /** 
* Method for setting users to display in GUI (variable JList Users) 
* @param user parameter for supplying JList 
*/ 
public void setUser(JList user){ 
    this.Users = user; 
} 

И, наконец, я контрольный ImpAppContorller класс:

private final GuiPanel appPanel; 
private final ImpAppModel impAppModel; 
/** 
* Main constructor method, creates variables for saving links on Data and 
* GUI. 
* @param appPanel Ensures communication between GUI panel and controller. 
* @param impAppModel Ensures communication between Model and controller. 
*/ 
public ImpAppController(GuiPanel appPanel, ImpAppModel impAppModel) { 

    this.appPanel = appPanel; 
    this.impAppModel = impAppModel; 

    appPanel.setUser(impAppModel.friendList.toArray()); 
} 

И у меня есть a Ошибка: непривилегированные типы: Object [] не может быть преобразован в Jlist.
Вопрос (И да, я сделал свое исследование, решения, которые я нашел, не подходят для использования в шаблоне MVC), как я могу реализовать контроллер (или изменить модель/представление) для предоставления JList элементам из массива с использованием контроллера класса при сохранении шаблона MVC.
/Edit: У меня тяжелое подозрение, что мои проблемы вызваны setUser метод в GUI классе, но вопрос остается тем же.

ответ

1

A JList содержит свои данные в виде ListModel. Определите данные для вашего Jlist с членом setModel().

Очевидно, не имеет смысла бросать массив в объект Model, но есть удобный класс DefaultListModel, который можно использовать для импорта массива в модель. Итак, в вашем классе appPanel вы можете добавить

public void setUserData(Object [] data){ 
    DefaultListModel model = new DefaultListModel(); 
    model.copyInto(data); 
    Users.setModel(model); // Users must exist 
} 
+0

Это путь, спасибо. –

0

appPanel.setUser(JList user) метод принимает объект типа JList, тогда как в appPanel.setUser(impAppModel.friendList.toArray()); вы передаете тип массива.

Вы должны сделать что-то вроде appPanel.setUser(new JList(impAppModel.friendList.toArray()));

Или предоставить перегруженный setUser(String[] arr) метод в классе AppPanel, который принимает массив и создать объект JList внутри.

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