2013-01-13 94 views
1

您好我有这个类实现一个JTextField:如何一个ActionListener添加到这个类实现了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类? :)

+1

我无法抗拒事实问“你为什么使用单身模式”?这种模式在不适当的情况下经常使用,应该主要避免。它总是消除灵活性,使进化更难。 –

回答

2

我想这就够了:

ExpressionView.instance.addActionListener(ExpressionListener.instance); 

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

+0

是的,但确切的说应该是在构造函数中?或者如果不是这是什么?我不认为它是一种方法... –

+0

由于你的单例实例是静态的,所以你肯定有一些使用它们的静态代码,你可以添加这个监听器。或者直接在其中一个的构造函数中。 – Jack

+0

我可以问你,你会把它放在哪里(你给我的那行代码)? –

相关问题