Java JTable не загружается - PullRequest
0 голосов
/ 12 мая 2018

У меня есть HashMap<Person, ArrayList<Account>>, и я хочу таблицу со всеми ключами (Persons) из HashMap. Проблема в том, что таблица пуста, если я пытаюсь создать ее в представлении, но если я создаю ее в main (с точно таким же кодом), она работает и заполняется данными. Я не знаю почему.

public class App 
{
public static void main( String[] args )
{

    View view = new View();
    Bank b = new Bank();
    Person p = new Person("Name","Prenume", "id");
    Person p1 = new Person("Name2","Prenume2", "id2");
    b.addPerson(p);
    b.addPerson(p1);

    view.personTbl = view.tablePers(b.mapper);
    view.sp = new JScrollPane(view.personTbl);
    view.personFrame.add(view.sp,BorderLayout.CENTER);
    view.viewPers.setVisible(true);
}
}

Если я создаю его таким образом, он не работает

 public View() {
    personFrame = new JFrame("Person");
    personFrame.setLayout(new BorderLayout());
    personFrame.setSize(400, 400);
    persBtnsPan = new JPanel();
    viewPers = new JFrame("View Pers");
    viewPers.setLayout(new BorderLayout());
    viewPers.setSize(400, 400);
    viewPersPan = new JPanel();
    addPerson = new JButton("add");
    editPerson = new JButton("edit");
    viewP = new JButton("view");

    personTbl = tablePers(b.mapper);
    sp = new JScrollPane(personTbl);

    persBtnsPan.add(addPerson);
    persBtnsPan.add(editPerson);
    persBtnsPan.add(viewP);
    personFrame.add(persBtnsPan, BorderLayout.NORTH);
    personFrame.add(sp,BorderLayout.CENTER);
    }

Это метод, который создает таблицу

    public static <T> JTable tablePers(HashMap<Person, ArrayList<Account>> map) {
    DefaultTableModel model = new DefaultTableModel(
        new Object[] { "Nume", "Prenume", "CNP" }, 0);
    for (HashMap.Entry<Person, ArrayList<Account>> entry : map.entrySet()) {
        model.addRow(new Object[] { entry.getKey().getNume(), entry.getKey().getPrenume(), entry.getKey().getCnp() });
    }
    tab = new JTable(model);
    return tab;
}

1 Ответ

0 голосов
/ 12 мая 2018

У вас есть проблемы с ссылками в том, что ваш b.mapper в представлении не совпадает с тем, что в основном, но не должен быть.Но для представления не имеет смысла обрабатывать такие данные.Вам необходимо передать модель в представление, прямо или косвенно, а затем в представлении отобразить состояние модели.

например,

public class App {
    Bank b = new Bank(); // the model
    //... do things with b here

    View view = new View(b); // pass the model in
    // and then in View's constructor use the model

}

Кроме того, если это программа MVC, тогда ваш контроллер будет отслеживать изменения вида и модели и уведомлять соответствующие объекты оизменения, обновление модели и вида.

например,

public static void main(String[] args) {
    BankModel model = new BankModel();
    model.addPerson(new BankPerson("LastName1", "FirstName1", "id1"));
    model.addPerson(new BankPerson("LastName2", "FirstName2", "id2"));
    BankView view = new BankView();
    BankController controller = new BankController(model, view);
    controller.displayGui();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...