如何从 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()
,而不是您已有的具有您键入的文本的实例。
我想用这段代码设计的是当我在文本字段中输入任何文本,然后点击按钮保存它。所以我一直在尝试几种方法,但我无法解决命令提示符显示为空的 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()
,而不是您已有的具有您键入的文本的实例。