Java 如何将ActionListener添加到此实现JTextField的类中
大家好,我有一个实现JTextField的类: 它还应该有一个addActionListener方法,我不知道如何编写Java 如何将ActionListener添加到此实现JTextField的类中,java,swing,actionlistener,jtextfield,Java,Swing,Actionlistener,Jtextfield,大家好,我有一个实现JTextField的类: 它还应该有一个addActionListener方法,我不知道如何编写 package gui; import gui.control.ExpressionListener; import gui.control.NewListener; import javax.swing.JTextField; public final class ExpressionView extends JTextField { public Strin
package gui;
import gui.control.ExpressionListener;
import gui.control.NewListener;
import javax.swing.JTextField;
public final class ExpressionView
extends JTextField {
public String text;
public static final long serialVersionUID = 1L;
public static final ExpressionView instance = new ExpressionView();
private ExpressionView() {
super("ExpressionView");
// This is a singleton.
}
@Override
private void addActionListener {
ExpressionView.addActionListener(ExpressionListener.instance);
}
}
执行操作的ExpressionListener类如下所示:
package gui.control;
import gui.ExpressionView;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.util.Scanner;
import spreadsheet.Application;
import spreadsheet.Expression;
import spreadsheet.exception.NoSuchSpreadsheetException;
import ui.ExpressionInterpreter;
import ui.exception.IllegalStartOfExpression;
import ui.exception.InvalidExpression;
import ui.exception.InvalidPositionException;
public final class ExpressionListener
implements ActionListener {
public static final ExpressionListener instance = new ExpressionListener();
private ExpressionListener() {
// This is a singleton.
}
@Override
public void actionPerformed(ActionEvent event) {
try {
Scanner scanner = new Scanner(ExpressionView.instance.getText());
Expression expression = ExpressionInterpreter.interpret(scanner);
Application.instance.set(expression);
} catch (InvalidPositionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchSpreadsheetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStartOfExpression e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvalidExpression e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
因此,您能否帮助我并演示如何将此ActionListener添加到ExpressionView类中?:) 我想这就足够了:
ExpressionView.instance.addActionListener(ExpressionListener.instance);
既然它们都是单例类,为什么您需要一个静态的
addActionListener
到ExpressionView
类?您已经可以从ExpressionView
singleton实例上的JTextField
中继承一个。是的,好的,但这应该在构造函数中的什么位置?如果不是,这是什么?我不认为它是一种方法……因为你的单例实例是静态的,那么你肯定有一些使用它们的静态代码,在那里你可以添加监听器。或者直接在其中一个的构造函数中。我可以问你将它放在哪里(你给我的那行代码)?我忍不住要问“你为什么使用单例模式”?这种模式在不恰当的情况下使用得太多,应该尽量避免。它总是会降低灵活性,使进化更加困难。