Почему это обновление JList не показывает атрибуты ArrayList - PullRequest
0 голосов
/ 19 февраля 2020

У меня есть ниже метод, который должен отображать атрибуты элементов arrayList в списке при вызове:

public void updateList(){

    DefaultListModel<String> model = (DefaultListModel<String>)jCustomerList.getModel();

        for(User user: theUserList.Users){        
        model.addElement(user.getName());   

        jCustomerList.setModel(model); 

        }
}

однако при его вызове появляется следующая ошибка:

Исключение в потоке " AWT-EventQueue-0 "java .lang.ClassCastException: supermarketiteration2.ShopJFrame $ 63 нельзя преобразовать в javax.swing.DefaultListModel

Как мне решить эту проблему?

EDIT **

Модель сделана глобальной, как показано ниже, однако теперь возникает ошибка при создании экземпляра модели:

public class ShopJFrame extends javax.swing.JFrame {
private UserList theUserList;
private User currentCustomer;
private Customer castedCustomer;
private SupplierList theSupplierList;
private DeliveryCompanyList theDeliveryCompanyList;
private ProductList theProductList;
private Product selectedProduct;
private Supplier aSupplier;
private DeliveryCompany aDeliveryCompany;
//private JList jCustomerList;

private java.awt.Component jTabInMemory1;
private java.awt.Component jTabInMemory2;
private java.awt.Component jTabInMemory3;
private java.awt.Component jTabInMemory4;
private java.awt.Component jTabInMemory5;
private java.awt.Component jTabInMemory6;

DefaultListModel<String> model;




    public ShopJFrame() throws IOException, FileNotFoundException, ParseException {
        initComponents();
    theUserList = new UserList();
    User currentCustomer = new Customer();
    Customer castedCustomer = null;
    theDeliveryCompanyList = new DeliveryCompanyList();
    aDeliveryCompany = new DeliveryCompany();
    theSupplierList = new SupplierList();
    aSupplier = new Supplier();
    theProductList = new ProductList();

    jTabInMemory1 = jMainTabbedPane.getComponent(1);//PRODUCTS
    jMainTabbedPane.remove(1);
    jTabInMemory2 = jMainTabbedPane.getComponent(1);//REORDER
    jMainTabbedPane.remove(1);
    jTabInMemory3 = jMainTabbedPane.getComponent(1);//SUPPLY CHAIN
    jMainTabbedPane.remove(1);
    jTabInMemory4 = jMainTabbedPane.getComponent(1);//CATALOGUE
    jMainTabbedPane.remove(1);
    jTabInMemory5 = jMainTabbedPane.getComponent(1);//MY ACCOUNT
    jMainTabbedPane.remove(1);
    jTabInMemory6 = jMainTabbedPane.getComponent(1);//MY ACCOUNT
    jMainTabbedPane.remove(1);

    theProductList.loadFromFile(theProductList.getFilename());
    theSupplierList.loadFromFile();
    theDeliveryCompanyList.loadFromFile();
    theUserList.loadFromFile();
    theProductList.displayReorders(jProductReorderTextArea);

    this.updateComboBox("Supplier");
    this.updateComboBox("Delivery Company");
    this.updateComboBox("Products");
    model = (DefaultListModel<String>)jCustomerList.getModel();
    jCustomerList.setModel(model); 

1 Ответ

1 голос
/ 19 февраля 2020

В свинге JComponent передается модель .

DefaultListModel<String> model = new DefaultListModel<>();
jCustomerList = new JList<String>(model);

model.addElement("Albert Einstein");
...

_ (более поздняя версия JavaFX имеет наблюдаемые типы данных, немного больше похоже на binding , как вы и предполагали.) _

Теперь не следует создавать новый JList или ListModel.

public void updateList() {

    DefaultListModel<String> model = (DefaultListModel<>)jCustomerList.getModel();
    model.addElement("Madame Curie");
}
...