Как обновить JPanel или JFrame

Функции отлично справляются со своей задачей, но не получается обновить значение jPanel.
Я пробовал repaint() и revalidate(), они не помогли.

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;

import javax.swing.*;

public class ContactPanel extends JPanel {
    private PersonGroup personGroup;
    private JTextArea textArea;
    JLabel lname, ladress, lemail, lnumber, lage;
    Person person;
    ContactPanel() {
        personGroup = new PersonGroup();

        textArea = new JTextArea(20, 30);
        textArea.setEditable(false);
        JScrollPane scrollPane = new JScrollPane(textArea);
        
        lname = new JLabel("ФИО");
        ladress = new JLabel("Адрес");
        lemail  = new JLabel("Email");
        lnumber = new JLabel("Номер телефона");
        lage=new JLabel("Возраст");

        lname.setBackground(Color.green);
        ladress.setBackground(Color.blue);
        lemail.setBackground(Color.green);
        lnumber.setBackground(Color.blue);
        lage.setBackground(Color.green);

        lname.setOpaque(true);
        ladress.setOpaque(true);
        lemail.setOpaque(true);
        lnumber.setOpaque(true);
        lage.setOpaque(true);

        add(lname);
        add(ladress);
        add(lemail);
        add(lnumber);
        add(lage);
        add(scrollPane, BorderLayout.CENTER);
    }

    public void AddNewPerson(String name, String address, String email, int phoneNumber, int age) {
        person = new Person(name, address, email, phoneNumber, age);
        personGroup.add(person);
        textArea.append(personGroup.printString());
        
        personGroup.print();
    }

    public void DeletePerson(String name) {        
        personGroup.del(name);
        textArea.setText(personGroup.printToString());
        personGroup.print();
    }

    public void SearchPerson(String name) {        
        personGroup.search(name);
        textArea.setText(personGroup.printToString());
    }

    public void SortedByName() {
        personGroup.sortByFIO();
        textArea.setText(personGroup.printToString());
        personGroup.print();
    }

    public void SortedByAge() {
        personGroup.sortYears();
        textArea.setText(personGroup.printToString());
        personGroup.print();
    }

    public void updateTextArea(String text) {
        textArea.setText(text); // Обновляем текстовую область с новым текстом
    }    
}

реализация arrayList

import java.util.*;

public class PersonGroup {
    ArrayList<Person> a;
    PersonGroup() {
        a = new ArrayList<Person>();
    }

    void add(Person p) {
        a.add(p);
    }

    void del(String fio) {
        int indexToRemove = -1;
    
        for (int i = 0; i < a.size(); i++) {
            if (fio.equalsIgnoreCase(a.get(i).getFio())) {
                indexToRemove = i;
                break; // Найден элемент, выходим из цикла
            }
        }
    
        if (indexToRemove != -1) {
            a.remove(indexToRemove);
            System.out.println("Удалена запись: " + fio);
        } else {
            System.out.println("Такой записи не найдено");
        }
    }

    void search(String fio) {
        boolean found = false;
    
        for (int i = 0; i < a.size(); i++) {
            if (fio.equalsIgnoreCase(a.get(i).getFio())) {
                found = true;
                System.out.println("Найден такой человек: " + a.get(i).toString());
                break; // Найден элемент, выходим из цикла
            }
        }
    
        if (!found) {
            System.out.println("Такого человека нет");
        }
    }

    void print() {
        for(int i = 0; i < a.size(); i++) {
            System.out.println(a.get(i).toString());
        }
    }

    public String printString() {
        StringBuilder result = new StringBuilder(); // Создаем StringBuilder для конкатенации строк
    
        for (int i = 0; i < a.size(); i++) {
            result.append(a.get(i).toString()).append("\n"); // Добавляем информацию о каждом объекте в строку
        }
    
        return result.toString(); // Возвращаем строку, содержащую информацию об объектах
    }

    public String printToString() {
        StringBuilder result = new StringBuilder();
        for (Person person : a) {
            result.append(person.toString()).append("\n");
        }
        return result.toString();
    }

    void sortByFIO() {
        a.sort(Person.FIOComparator);
    }

    void sortNumber() {
        a.sort(Person.SortNumber);
    }

    void sortYears() {
        a.sort(Person.YearsComparator);
    }
}

Окно, которое отвечает за добавление новых контактов

import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

public class FormWindow extends JPanel {
    JFrame formWindow = new JFrame();
    ContactPanel panel = new ContactPanel();
    PersonGroup personGroup = new PersonGroup();
    JLabel lname, ladress, lemail, lnumber, lage;
    JTextField tname, tadress, temail, tnumber, tage;
    JButton closeBtn,acceptBtn;
    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (screenSize.width -400) / 2;
    int y = (screenSize.height-200) / 2;

    FormWindow(ContactPanel panel) {
        this.panel = panel;
        formWindow.setLocation(x, y);
        formWindow.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        formWindow.setSize(400, 200);
        formWindow.setResizable(false);
        formWindow.setLayout(new GridLayout(6, 2));

        lname = new JLabel("ФИО");
        ladress = new JLabel("Адрес");
        lemail = new JLabel("Email");
        lnumber = new JLabel("Номер телефона");
        lage = new JLabel("Возраст");

        tname = new JTextField();
        tadress = new JTextField();
        temail = new JTextField();
        tnumber = new JTextField();
        tage = new JTextField();

        acceptBtn = new JButton("ОК");
        closeBtn = new JButton("Отмена");

        formWindow.add(lname);
        formWindow.add(tname);

        formWindow.add(ladress);
        formWindow.add(tadress);

        formWindow.add(lemail);
        formWindow.add(temail);

        formWindow.add(lnumber);
        formWindow.add(tnumber);

        formWindow.add(lage);
        formWindow.add(tage);

        acceptBtn.addActionListener(new Accept());
        closeBtn.addActionListener(new Close());

        formWindow.add(acceptBtn);
        formWindow.add(closeBtn);

        formWindow.setVisible(true);
    }

    private class Accept implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            panel.AddNewPerson(
                tname.getText(), tadress.getText(), temail.getText(),
                Integer.parseInt(tnumber.getText()), 
                Integer.parseInt(tage.getText())
            );
            tname.setText("");
            tadress.setText("");
            temail.setText("");
            tnumber.setText("");
            tage.setText("");
            String infoAboutPeople = personGroup.printToString(); // Получаем информацию о людях из personGroup
            panel.updateTextArea(infoAboutPeople); 
        }
    }

    private class Close implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            System.out.println("window close");
            formWindow.dispose();
        }
    }
}

Ответы (0 шт):