嵌套类不会从母类读取



我开始学习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();
        }
    }
}

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

相关内容

  • 没有找到相关文章

最新更新