2013-01-13 43 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

我可以問你,你會把它放在哪裏(你給我的那行代碼)? –

相關問題