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