我想设计的是这个代码是当我在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();
}
}
答案 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()
而不是您已经拥有您输入文本的实例。