Как обновить 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();
}
}
}