На панельке есть текстовое поле и lable, из label данные должны передаватся в текстовое поле

На панельке есть текстовое поле и lable, из label данные должны передаваться в текстовое поле, но есть одна строка которая мешает, если ее убрать, то всё будет работать нормально, вот эта строка:

First f = new First(prizvyshe.getText(),imya.getText(),pobatkovi.getText(),misto.getText(),adresa.getText(),telefon.getText(),POL.getText());

Я хочу, чтобы каждый раз когда кнопка нажималась выполнялось действие, прописанное в классе - считывались данные и заполнялись те несколько массивов строк.

Код:

package mainkursova;

import java.awt.*;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

import javax.swing.JPanel;
class First {
    String[] prizvyche, ima, batka, mist, adres, telefone, poll;
    int i = -1;
    First(String p, String im, String b, String m, String a, String t, String pol){
        i++;
        this.prizvyche[i] = p;
        this.ima[i] = im;
        this.batka[i] = b;
        this.mist[i] = m;
        this.adres[i] = a;
        this.telefone[i] = t;
        this.poll[i] = pol;
        
    }
    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setTitle("Мій Телефонний Довідник");
        frame.setSize(300, 200);
        frame.setLocation(500, 500);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
        JPanel panel = new JPanel();
        frame.add(panel);
        JLabel label1 = new JLabel("прізвище");
        JLabel label2 = new JLabel("ім’я");
        JLabel label3 = new JLabel("по батькові");
        JLabel label4 = new JLabel("місто");
        JLabel label5 = new JLabel("домашня адреса");
        JLabel label6 = new JLabel("стать");
        JLabel label = new JLabel("телефон");
        
        JTextField prizvyshe = new JTextField(8);
        JTextField imya = new JTextField(8);
        JTextField pobatkovi = new JTextField(8);
        JTextField misto = new JTextField(8);
        JTextField adresa = new JTextField(8);
        JTextField telefon = new JTextField(8);
        JTextField POL = new JTextField(8);
        TextArea text = new TextArea();
        
        panel.add(prizvyshe);
        panel.add(imya);
        panel.add(pobatkovi);
        panel.add(misto);
        panel.add(adresa);
        panel.add(text);
        panel.add(POL);
        panel.add(telefon);
        
        
        JButton mainprofesor = new JButton("добавити в довідник");
        panel.add(mainprofesor);
        mainprofesor.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent event){
                First f = new First(prizvyshe.getText(),imya.getText(),pobatkovi.getText(),misto.getText(),adresa.getText(),telefon.getText(),POL.getText());
                String h = text.getText();
                text.setText(h+'\n'+prizvyshe.getText()+" "+imya.getText()+" "+pobatkovi.getText()+" "+misto.getText()+" "+adresa.getText()+" "+telefon.getText()+" "+POL.getText()+'\n');
                prizvyshe.setText("");
                imya.setText("");
                pobatkovi.setText("");
                misto.setText("");
                adresa.setText("");
                telefon.setText("");
                POL.setText("");
            }
        });
        
        JMenu serch = new JMenu("Пошук за.."); 
        JMenu serch2 = new JMenu("Пошук за..");
        
        
        panel.setVisible(true);
    }
}

Общее задание: "сделать телефонную книжку", которую можно редактировать, удалять записи, искать по полу, номеру, городу и т.д., другие способы решения приветствуются.


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

Автор решения: Roman C

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at mainkursova.First.(First.java:16) at

Потому, что не инициализированы переменные, к которым вы обращаетесь из конструктора

String[] prizvyche, ima, batka, mist, adres, telefone, poll;

в конструкторе

prizvyche = new String[100];
ima = new String[100];
...

Размерность массива выбрана условно, то есть не должно быть больше 100 записей.

Потом эти переменные и i нужно сделать static, иначе вы не сможете поменять значение.

Вот здесь в Java Tutorial даётся подробное описание про статические переменные.

Иногда вам нужно иметь переменные, общие для всех объектов. Это достигается с помощью модификатора static. Поля, в объявлении которых есть модификатор static, называются статическими полями или переменными класса. Они связаны с классом, а не с каким-либо объектом. Каждый экземпляр класса разделяет переменную класса, которая находится в одном фиксированном месте в памяти. Любой объект может изменить значение переменной класса, но переменными класса также можно управлять без создания экземпляра класса.

→ Ссылка
Автор решения: Дмитрий

Если бы инициализация переменных была основной проблемой этого кода, то это было бы просто здорово. Попробуйте для начала хотя бы так(лишний код я закоментировал, он у вас ничего не делает и как с ним быть решайте сами):

import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class First extends JFrame {

    private final List<PhoneBook> phoneBooks;

    private JTextField[] textFields;
    private TextArea textArea;

    public First() {
        this.phoneBooks = new ArrayList<>();
        initComponents();
    }

    private void initComponents() {

        setTitle("Мій телефонний довідник");
        setSize(800, 250);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
        JPanel panel = new JPanel();
        add(panel);

//        JLabel label1 = new JLabel("Прізвище");
//        JLabel label2 = new JLabel("Ім’я");
//        JLabel label3 = new JLabel("По батькові");
//        JLabel label4 = new JLabel("Місто");
//        JLabel label5 = new JLabel("Домашня адреса");
//        JLabel label6 = new JLabel("Стать");
//        JLabel label = new JLabel("Телефон");
        textFields = Stream.of(new JTextField(8), new JTextField(8), new JTextField(8), new JTextField(8),
                        new JTextField(8), new JTextField(8), new JTextField(8))
                .peek(panel::add)
                .toArray(JTextField[]::new);

        textArea = new TextArea();
        panel.add(textArea);

        JButton addButton = new JButton("добавити в довідник");
        panel.add(addButton);
        addButton.addActionListener(this::addButtonPressed);

//        JMenu serch = new JMenu("Пошук за..");
//        JMenu serch2 = new JMenu("Пошук за..");
    }

    private void addButtonPressed(ActionEvent event) {
        phoneBooks.add(new PhoneBook(textFields[0].getText(), textFields[1].getText(), textFields[2].getText(),
                textFields[3].getText(), textFields[4].getText(), textFields[5].getText(), textFields[6].getText()));
        textArea.setText(phoneBooks.stream().map(pb -> pb.toString()).collect(Collectors.joining("\n")));
        for (JTextField textField : textFields) textField.setText("");
    }

    public static void main(String[] args) {
        java.awt.EventQueue.invokeLater(() -> {
            First uf = new First();
            uf.setVisible(true);
            uf.setLocationRelativeTo(null);
            //uf.setResizable(false);
        });
    }

    private static class PhoneBook {

        private final String surname, name, patronymic, city, address, phone, sex;

        public PhoneBook(String surname, String name, String patronymic, String city, String address, String phone, String sex) {
            this.surname = surname;
            this.name = name;
            this.patronymic = patronymic;
            this.city = city;
            this.address = address;
            this.phone = phone;
            this.sex = sex;
        }

        @Override
        public String toString() {
            return surname + " " + name + " " + patronymic + ", " + city + ", " + address + ", " + phone + ", " + sex;
        }

    }
}
→ Ссылка