我开始学习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();
}
}
}
这样,您甚至不需要将此类定义为内部类,顺便说一下,这是更可取的方式。