我不能使用JTextField

时间:2014-05-26 16:46:51

标签: java swing jtextfield

我遇到了JTextField的问题。我将输入我的表格名称,姓氏,电话号码和电子邮件。但我不知道怎么做。实际上System.out.print打印4次null。方法.getText()返回未知来源。

这是我的代码:

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();
    }
}
}

2 个答案:

答案 0 :(得分:1)

您正在构造函数中重新声明您的实例变量。当你这样做

JTextField s_imie = new JTextField();

您正在创建一个本地变量,因此实例不会受到影响。

你怎么解决?不要再声明它们,只是初始化:

s_imie = new JTextField();

你应该对其他变量做同样的事情。

答案 1 :(得分:1)

你正在压倒你的Attibutes的可见性

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

而不是:

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

使用它初始化声明的变量而不是创建一个新变量:

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

然后使用以下内容打印出内容:

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

为所有变量执行此操作。