从JTextField存储值时,无法解析Java中的字段

时间:2017-10-03 12:41:38

标签: java jtextfield actionevent

我使用ActionListener JButton来存储值时遇到问题。我对Java很陌生,对类和子类编程方式没有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()移到自己的班级吗?

2 个答案:

答案 0 :(得分:0)

您的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-对象并修改(或检索)属性/方法。

答案 1 :(得分:0)

您遇到问题的原因是变量字段的范围。

在java中,变量的范围由其定义的代码块设置。您的JTextField字段在setFrame方法中声明,这意味着该变量仅在setFrame方法中可见。

如果你想让整个类中的字段变量可见,以便你可以在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");
    }
}

希望上面的代码解释得足够,任何问题请评论,我会详细说明。