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

时间:2015-11-13 14:26:14

标签: java swing frame

我想设计的是这个代码是当我在Textfield中输入任何文本,然后点击按钮保存它。所以我一直在尝试一些方法,但我无法解决这个命令提示符给我一个空的空间......

当我尝试将源代码添加到“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();
    }

}

2 个答案:

答案 0 :(得分:2)

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

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

尝试将TxtField本身设为ActionListener:

public class TxtField implements ActionListener 

然后引用当前实例:

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

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

String s = savedTxt();

答案 1 :(得分:2)

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

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();
    }

}

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