我开始学习GUI Java,我有一个“ NewClass”类,其中包含一个带有一些字段和按钮的窗口,我在该类中嵌套了一个“ Escuchador”类以用作事件处理程序,但它始终为我提供错误“找不到此符号”。我做了一些测试,它不会从“ NewClass”内部读取。我不明白怎么了,请帮忙,这是代码:

package javaapplication1;

import javax.swing.*;
import javax.swing.JTextField;
import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;


public class NewClass extends JFrame {
    final int FRAME_WIDTH = 300;
    final int FRAME_HEIGHT = 200;

    public NewClass() {
        super("ARTICULACION SOCIAL");
        setSize(FRAME_WIDTH, FRAME_HEIGHT);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JLabel heading = new JLabel("Identifiquese para entrar");
        heading.setFont(new Font("Arial", Font.BOLD, 16));
        JLabel namePrompt = new JLabel("Ingrese su nombre de usuario:");
        JTextField nameField = new JTextField(12);
        JLabel namePrompt2 = new JLabel("Ingrese su contraseña:");
        JTextField nameField2 = new JTextField(12);
        JButton button = new JButton("Ingresar");
        setLayout(new FlowLayout());
        add(heading);
        add(namePrompt);
        add(nameField);
        add(namePrompt2);
        add(nameField2);
        add(button);

        Escuchador escuchar = new Escuchador();
        nameField.addActionListener(escuchar);
        nameField2.addActionListener(escuchar);
        button.addActionListener(escuchar);

    }

    private class Escuchador implements ActionListener{

        public void actionPerformed (ActionEvent event){
            String usuario="";


            if (event.getSource()== nameField) {
               usuario = event.getActionCommand();
            }
        }
    }

}

最佳答案

问题在于nameField是构造函数中的局部变量。它的范围不超过您的构造函数。

您有几种选择。

nameField设置为类变量(在构造函数之外定义它),以便内部类可以使用它。

另外,您可以将nameField作为构造函数参数传递给内部类:

public class Escuchador implements ActionListener{

    private JTextField nameField;

    public Escuchador(JTextField nameField){
        this.nameField = nameField;
    }

    public void actionPerformed (ActionEvent event){
        String usuario = "";

        if (event.getSource()== this.nameField) {
           usuario = event.getActionCommand();
        }
    }
}


这样,您甚至不需要将此类定义为内部类,顺便说一下,这是更可取的方法。

10-06 03:32