【问题标题】:How to add an ActionListener to this class implementing JTextField如何将 ActionListener 添加到实现 JTextField 的此类
【发布时间】:2013-01-13 17:37:23
【问题描述】:

您好,我有这个类实现了一个 JTextField:

其中还应该有一个addActoinListener方法,我不知道怎么写……

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 类吗? :)

【问题讨论】:

  • 我忍不住要问“你为什么使用单例模式”?这种模式在不恰当的情况下使用得太频繁了,应该主要避免。它总是会消除灵活性并使进化变得更加困难。

标签: java swing actionlistener jtextfield


【解决方案1】:

我想这就够了:

ExpressionView.instance.addActionListener(ExpressionListener.instance);

既然它们都是单例类,为什么你需要一个静态的 addActionListenerExpressionView 类?您已经可以在ExpressionView 单例实例上从JTextField 继承一个。

【讨论】:

  • 是的,但是在构造函数中这到底应该在哪里?或者如果不是,这是什么?我不承认它是一种方法......
  • 既然你的单例实例是静态的,那么你肯定有一些使用它们的静态代码,你可以在那里添加监听器。或者直接在其中一个的构造函数中。
  • 我能问你把它放在哪里(你给我的那行代码)吗?
猜你喜欢
  • 2016-10-29
  • 1970-01-01
  • 2012-06-07
  • 1970-01-01
  • 1970-01-01
  • 2021-06-24
  • 1970-01-01
  • 2011-07-06
  • 2013-04-01
相关资源
最近更新 更多