java为什么这个ActionListener不工作?
我正在学习使用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
,它想要创建这个变量并初始化它
怎么了
# 1 楼答案
类型化未声明为变量。所以,要么声明它,要么用“”括起来
编辑: 是的,您确实声明了它,但它是TextFrame1类中createComponents函数中的局部变量
您需要像这样传递值:
变量不应该是大写的,而应该是小写的。大写代表常量
编辑2:我的错,侦听器构造函数应该接受字符串类型,而不是int类型。我修正了密码。至于您的另一个问题,那是因为您现在需要将输入结果传递给侦听器声明
或者干脆做:
# 2 楼答案
这是因为变量在^{中未定义。在
TextFrame1#createComponents
中创建一个名为TYPED
的局部变量,但在TextListener
中的actionPerformed
中不可见事实上,您正在将变量分配给
JTextField
的初始文本,默认情况下,它是一个空的String
。如果要获取组件的当前文本,可以将其传递给构造函数:像这样创建
TextListener