在程序中我想使用actionListener来监控TextFrame。我创建了一个名为monitor的类,并且有一个构造函数可以调用整个TextFieldFrame,TFFrame。
class Monitor implements ActionListener{
TFFrame tf = null;
public void Monitor(TFFrame tf){
this.tf = tf;
}
在TFFrame类中,我添加了一个调用自身的actionListener。
class TFFrame extends Frame{
TextField num1, num2, num3;
public void launchFrame(){
num1 = new TextField(10);
num2 = new TextField(10);
num3 = new TextField(20);
Label plus = new Label("+");
Button equal = new Button("=");
equal.addActionListener(new Monitor(this));
然而,编译器是错误的,并且监视器中的错误是不正确的。有什么问题?
答案 0 :(得分:0)
ActionListener是一个接口,只有一个必需的方法:
actionPerformed(ActionEvent e)
你似乎没有在这里实际实现过这种方法。通常情况下,当发生适当的事件时,它会在引擎盖下被调用。
我认为您可能没有正确使用事件和侦听器。从逻辑上讲,根据我从示例代码中理解的内容,您可以使用以下内容:
TFFrame tf = new TFFrame();
tf.addActionListener( new Monitor() );
一个问题是框架具有它自己的一组事件,并且不会通过点击按钮或通过框架向听众聚焦文本字段来传达事件。框架的事件将最终调用您应该在Monitor中的actionPerformed方法。
您当然可以将其他内容添加到自定义侦听器中,但侦听器通常不会包含对其侦听的内容的引用。也许你真正想要的只是一个动作助手来检查何时按下等号按钮,在这种情况下你会有这样的事情。
TFFrame tf = new TFFrame();
tf.launchFrame();
在launchFrame方法的内部,你可以为equals按钮添加一个动作监听器,并带有某种按钮监听器。
equals.addActionListener( new ButtonListener() );
现在为了工作,您必须创建一个名为按钮侦听器的类来实现动作侦听器,然后在其内部的actionPerformed方法中编写相应的事件处理代码。
P.S。 说实话,这很有道理。如果我对你想要的东西不对,那么我建议你去阅读:https://docs.oracle.com/javase/tutorial/uiswing/events/actionlistener.html