Search code examples
javaswingjtextfield

I cant use JTextField


I have a problem with JTextField. I will type in my form name, surname, phone_number and email. But I don't know how. Actually System.out.print prints 4 times null. Method .getText() return unknow source.

This is my code:

package View;

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

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

import Date.DaneDoKontaktow;
import Date.KolekcjaKontaktow;
import Main.main;
import Model.OperacjeKontakty;

public class DodajKontakt extends JFrame implements ActionListener {

public JButton dodaj;
public JButton anuluj;
public JTextField s_imie;
public JTextField s_nazwisko;
public JTextField s_telefon;
public JTextField s_email;
private OperacjeKontakty operacje = new OperacjeKontakty();

public DodajKontakt(){
    super("Dodawanie kontaktu");
    setSize(300,300);
    setLocationRelativeTo(null);
    setLayout(null);
    setResizable(false);
    setVisible(true);

    dodaj = new JButton("Dodaj");
    dodaj.setBounds(50, 220, 100, 30);
    add(dodaj);

    anuluj = new JButton("Anuluj");
    anuluj.setBounds(165, 220, 100, 30);
    add(anuluj);

    DaneDoKontaktow dane = new DaneDoKontaktow();

    JLabel imie = new JLabel(dane.imie);
    imie.setBounds(15,30,70,15);
    add(imie);

    JLabel nazwisko = new JLabel(dane.nazwisko);
    nazwisko.setBounds(15,60,70,20);
    add(nazwisko);

    JLabel telefon = new JLabel(dane.telefon);
    telefon.setBounds(15,90,70,20);
    add(telefon);

    JLabel email = new JLabel(dane.email);
    email.setBounds(15,120,70,20);
    add(email);

    anuluj.addActionListener(this);
    anuluj.setActionCommand("klik_anuluj");

    JTextField s_imie = new JTextField();
    s_imie.setBounds(100,20,150,30);
    add(s_imie);

    JTextField s_nazwisko = new JTextField();
    s_nazwisko.setBounds(100,52,150,30);
    add(s_nazwisko);

    JTextField s_telefon = new JTextField();
    s_telefon.setBounds(100,85,150,30);
    add(s_telefon);

    JTextField s_email = new JTextField();
    s_email.setBounds(100,117,150,30);
    add(s_email);

    dodaj.addActionListener(this);
    dodaj.setActionCommand("dodaj");

}

public void actionPerformed(ActionEvent e) {

    if( e.getActionCommand().equals("klik_anuluj")){
        this.dispose();
    }
    if (e.getActionCommand().equals("dodaj")){
        System.out.print(s_imie);
        System.out.print(s_nazwisko);
        System.out.print(s_telefon);
        System.out.print(s_email);
        //operacje.dodaj(s_imie.getText(), s_nazwisko.getText(), s_email.getText(), s_telefon.getText());
        this.dispose();
    }
}
}

Solution

  • you are overriding the visibility of your Attibutes

    public JTextField s_imie;
    public JTextField s_nazwisko;
    public JTextField s_telefon;
    public JTextField s_email;
    

    Instead of :

    JTextField s_imie = new JTextField();
    s_imie.setBounds(100,20,150,30);
    add(s_imie);
    

    use this to initialize your declared variable instead of creating a new one:

    s_imie = new JTextField();
    s_imie.setBounds(100,20,150,30);
    add(s_imie);
    

    Afterwards use the following to print out the content:

    System.out.print(s_imie.getText());
    

    Do this for all your variables.