从 JTextField 存储值时无法解析 Java 中的字段
Unable to resolve field in Java when storing values from JTextField
我在使用 ActionListener
和 JButton
存储值时遇到问题。我是 Java 的新手,对 class 和 subclass 编程方式不是 100% 有信心。
import java.ActionEvent;
import javaActionListener;
import javax.swing JButton;
import javax.swing JPanel;
import javax.swing.JTextField;
public class Trial extends JPanel implements Action Listener {
private static final long serialVersionUID = 1L;
public Trial() {
setFrame();
}
public void setFrame(){
JFrame frame = new JFrame("Trial");
JPanel panel = new JPanel();
JTextField field = new JTextField(10);
JButton button = new JButton("Enter");
button.addActionListener(this);
panel.add(field);
panel.add(button);
frame.add(panel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
public static void main(String[] args) {
new Trial();
}
@Override
public void actionPerformed(ActionEvent e) {
String s = field.getText();
System.out.prinln("Button is pressed");
}
}
字段在actionPerformed
中未定义,为什么会这样?我试过 ActionEvent,似乎我无法传入 actionPerformed
函数之外的任何变量。那么我该怎么做呢?我需要将 setFrame()
移动到它自己的 class 吗?
您的 setFrame() 方法创建并初始化了字段,但另一个方法无法访问具有特定属性的特定对象。
试试这个:
public class Trial extends JPanel implements Action Listener {
JTextField field;
..// omitted
public void setFrame()
{
JFrame frame = new JFrame("Trial");
JPanel panel = new JPanel();
field = new JTextField(10);
.. //omitted
当在任何方法之外声明了 -certain- 对象时,这意味着任何方法都可以访问此 -certain- 对象并从中修改(或检索)属性/方法。
您的问题的原因在于变量字段的范围。
在 java 中,变量的范围由定义它的代码块设置。您的 JTextField 字段在 setFrame 方法中声明,这意味着该变量仅在 setFrame 方法中可见。
如果您想让字段变量在整个 class 中可见,以便您可以在 actionPerformed 方法中访问它,您可以将其设为实例变量。
public class Trial extends JPanel implements Action Listener {
private static final long serialVersionUID = 1L;
private JTextField field; //Move your declaration to class level, making it an instance variable.
public Trial() {
setFrame();
}
public void setFrame(){
JFrame frame = new JFrame("Trial");
JPanel panel = new JPanel();
field = new JTextField(10); //Remove the declaration of the variable and just initialize it here.
JButton button = new JButton("Enter");
button.addActionListener(this);
panel.add(field);
panel.add(button);
frame.add(panel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
public static void main(String[] args) {
new Trial();
}
@Override
public void actionPerformed(ActionEvent e) {
String s = field.getText(); //Now you can access field within any method in the class.
System.out.prinln("Button is pressed");
}
}
希望上面的代码已经足够说明问题了,有什么问题可以评论,我会详细说明的。
我在使用 ActionListener
和 JButton
存储值时遇到问题。我是 Java 的新手,对 class 和 subclass 编程方式不是 100% 有信心。
import java.ActionEvent;
import javaActionListener;
import javax.swing JButton;
import javax.swing JPanel;
import javax.swing.JTextField;
public class Trial extends JPanel implements Action Listener {
private static final long serialVersionUID = 1L;
public Trial() {
setFrame();
}
public void setFrame(){
JFrame frame = new JFrame("Trial");
JPanel panel = new JPanel();
JTextField field = new JTextField(10);
JButton button = new JButton("Enter");
button.addActionListener(this);
panel.add(field);
panel.add(button);
frame.add(panel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
public static void main(String[] args) {
new Trial();
}
@Override
public void actionPerformed(ActionEvent e) {
String s = field.getText();
System.out.prinln("Button is pressed");
}
}
字段在actionPerformed
中未定义,为什么会这样?我试过 ActionEvent,似乎我无法传入 actionPerformed
函数之外的任何变量。那么我该怎么做呢?我需要将 setFrame()
移动到它自己的 class 吗?
您的 setFrame() 方法创建并初始化了字段,但另一个方法无法访问具有特定属性的特定对象。
试试这个:
public class Trial extends JPanel implements Action Listener {
JTextField field;
..// omitted
public void setFrame()
{
JFrame frame = new JFrame("Trial");
JPanel panel = new JPanel();
field = new JTextField(10);
.. //omitted
当在任何方法之外声明了 -certain- 对象时,这意味着任何方法都可以访问此 -certain- 对象并从中修改(或检索)属性/方法。
您的问题的原因在于变量字段的范围。
在 java 中,变量的范围由定义它的代码块设置。您的 JTextField 字段在 setFrame 方法中声明,这意味着该变量仅在 setFrame 方法中可见。
如果您想让字段变量在整个 class 中可见,以便您可以在 actionPerformed 方法中访问它,您可以将其设为实例变量。
public class Trial extends JPanel implements Action Listener {
private static final long serialVersionUID = 1L;
private JTextField field; //Move your declaration to class level, making it an instance variable.
public Trial() {
setFrame();
}
public void setFrame(){
JFrame frame = new JFrame("Trial");
JPanel panel = new JPanel();
field = new JTextField(10); //Remove the declaration of the variable and just initialize it here.
JButton button = new JButton("Enter");
button.addActionListener(this);
panel.add(field);
panel.add(button);
frame.add(panel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
public static void main(String[] args) {
new Trial();
}
@Override
public void actionPerformed(ActionEvent e) {
String s = field.getText(); //Now you can access field within any method in the class.
System.out.prinln("Button is pressed");
}
}
希望上面的代码已经足够说明问题了,有什么问题可以评论,我会详细说明的。