1

こんにちは、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 クラスに追加する方法を教えてください。:)

4

1 に答える 1

2

これで十分だと思います:

ExpressionView.instance.addActionListener(ExpressionListener.instance);

addActionListenerどちらもシングルトン クラスなので、クラスに staticが必要なのはなぜExpressionViewですか? シングルトンインスタンスから継承JTextFieldしたものをすでに使用できます。ExpressionView

于 2013-01-13T17:41:04.543 に答える