如何从 main 方法中的文本字段中检索文本

how to retrieve a text from textfield out of main method

我想用这段代码设计的是当我在文本字段中输入任何文本,然后点击按钮保存它。所以我一直在尝试几种方法,但我无法解决命令提示符显示为空的 space...

当我尝试将源代码放入 "main" 方法时,它运行良好,正如我预期的那样..

这是我的源代码:

package test;

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;

class testListener implements ActionListener {

    @Override
    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub
        String s = new TxtField().savedTxt();

        System.out.println("ActionPerformed :" + s);
    }

}

public class TxtField {

    static JTextField jtf;
    JFrame jf;
    JButton jbtn;

    static String temp;

    public TxtField() {

        jtf = new JTextField(10);
        jf = new JFrame("JFrame");
        jbtn = new JButton("OK");

        jf.add(jtf);
        jf.add(jbtn);

        jf.setVisible(true);
        jf.setSize(300, 300);
        jf.setLayout(new GridLayout(2, 0));
        jf.setLocationRelativeTo(null);
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jtf.addActionListener(new testListener());
        jbtn.addActionListener(new testListener());

    }

    public String savedTxt() {
        temp = jtf.getText();
        System.out.println("Temp is :" + temp);
        return temp;
    }

    public static void main(String[] args) {
        new TxtField();
    }

}

您在调用操作时创建了一个新的 TxtField,而不是引用调用操作的 TxtField:

String s = new TxtField().savedTxt();

尝试让 TxtField 本身成为 ActionListener:

public class TxtField implements ActionListener 

然后引用当前实例:

jtf.addActionListener(this);
jbtn.addActionListener(this);

然后在当前实例中引用JTextField:

String s = savedTxt();

你很接近...你可以这样做:

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;

public class Test {
    Test t;
    static JTextField jtf;
    JFrame jf;
    JButton jbtn;

    static String temp;

    public Test() {
        t = this;
        class testListener implements ActionListener {

            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                String s = jtf.getText();
                t.savedTxt();
                System.out.println("ActionPerformed :" + s);
            }

        }

        jtf = new JTextField(10);
        jf = new JFrame("JFrame");
        jbtn = new JButton("OK");

        jf.add(jtf);
        jf.add(jbtn);

        jf.setVisible(true);
        jf.setSize(300, 300);
        jf.setLayout(new GridLayout(2, 0));
        jf.setLocationRelativeTo(null);
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jtf.addActionListener(new testListener());
        jbtn.addActionListener(new testListener());


    }

    public String savedTxt() {
        temp = jtf.getText();
        System.out.println("Temp is :" + temp);
        return temp;
    }

    public static void main(String[] args) {
        Test t1 = new Test();
    }

}

问题是您在 actionPerformed 事件中创建 class 的 new Instance,而不是使用您已经拥有的那个... String s = new TxtField().savedTxt(); 这是在新实例上调用 savedTxt(),而不是您已有的具有您键入的文本的实例。