【问题标题】:how to retrieve a text from textfield out of main method如何从主方法中的文本字段中检索文本
【发布时间】:2015-11-13 14:26:14
【问题描述】:

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

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

}

【问题讨论】:

  • 清楚地解释什么不起作用并提出具体问题。
  • @Manu 嗨,单击按钮后,我无法获取放入文本字​​段的文本。命令提示符显示如下: Temp is : ActionPerformed :

标签: java swing frame


【解决方案1】:

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

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

尝试让 TxtField 本身成为 ActionListener:

public class TxtField implements ActionListener 

然后引用当前实例:

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

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

String s = savedTxt();

【讨论】:

  • 非常感谢您的帮助!它运作良好!太感谢了。 :)
  • 如果它有助于解决问题,请accept the answer
【解决方案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();
    }

}

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

【讨论】:

  • 非常感谢 :) 我将尝试源代码并尝试使其成为我的 :)
猜你喜欢
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
  • 2011-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多