我只是学习使用ActionListener
并使小部件正常工作。
这是我想要打印JTextField
中所输入内容的简单程序。
TextViewer1
import javax.swing.JFrame;
public class TextViewer1 {
/**
* @param args
*/
public static void main(String[] args) {
JFrame frame = new TextFrame1();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
TextFrame1
import java.awt.event.ActionListener;
import javax.swing.*;
public class TextFrame1 extends JFrame {
private static final int FRAME_WIDTH = 300;
private static final int FRAME_HEIGHT = 200;
public TextFrame1() {
createComponents();
setSize(FRAME_WIDTH, FRAME_HEIGHT);
}
private void createComponents() {
JPanel panel = new JPanel();
add(panel);
JTextField textbox = new JTextField(20);
panel.add(textbox);
String TYPED = textbox.getText();
ActionListener sendsText = new TextListener();
textbox.addActionListener(sendsText);
}
}
的TextListener
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class TextListener implements ActionListener {
/**
* @param args
*/
public void actionPerformed(ActionEvent event) {
System.out.println(TYPED);
}
}
所以问题是'TextListener'中的变量TYPED
,它想要创建这个变量并初始化它。
有什么问题?
答案 0 :(得分:2)
所以问题是'Text Listener'中的变量TYPED,它想要创建这个变量并初始化它。
这是因为TextListener
中的变量未定义。您在TYPED
中创建了一个名为TextFrame1#createComponents
的本地变量,但这在actionPerformed
TextListener
中不可见。
实际上,您将变量分配给JTextField
的初始文本,默认情况下为String
。如果要获取组件的当前文本,可以将其传递给构造函数:
class TextListener implements ActionListener {
private final JTextField textField;
public TextListener(JTextField textField) {
this.textField = textField;
}
@Override
public void actionPerformed(ActionEvent event) {
System.out.println(textField.getText());
}
}
像这样创建TextListener
:
ActionListener sendsText = new TextListener(textbox);
答案 1 :(得分:2)
TYPED未声明为变量。所以要么声明它,要么用“”包围它。
编辑: 是的,你确实声明了它,但是作为TextFrame1类中createComponents函数内的局部变量。
您需要传递以下值:
public class TextListener implements ActionListener {
private String typed;
public TextListener(String typed) {
this.typed = typed;
}
/**
* @param args
*/
public void actionPerformed(ActionEvent event) {
System.out.println(typed);
}
}
哦,变量不应该是大写,而是小写。大写是常量。
编辑2:我的不好,那个监听器构造函数应该接受String typed,而不是int typed。我修复了代码。至于你的另一个问题,那是因为你现在需要将输入结果传递给监听器声明。
ActionListener sendsText = new TextListener(TYPED);
或者只是这样做:
ActionListener sendsText = new TextListener(textbox.getText());