2015-10-14 81 views
0

我在我的計算機科學類中有一個練習,我正在學習在Java小程序中使用Action偵聽器。雖然我有點困惑,可以做一些幫助!這裏是我必須執行的練習:在不同的類中使用ActionListener

「爲三個按鈕提供一個按鈕處理程序類。構造函數應該將其作爲其參數作爲參數引用該applet併爲該尺寸指定一個合適的整數值。add addActionListener calls到init方法(即每個應該創建一個專用於特定按鈕的新處理程序對象)。編譯並運行你的applet。「

我創建了一個按鈕處理程序類,並創建了構造函數(我認爲我做的正確)。我的主要問題是「add addActionListener調用init方法」部分。

這裏是ButtonHandler類我創建:

 class ButtonHandler implements ActionListener { 

     Square theApplet; 

     ButtonHandler(Square app){ 
      theApplet = app; 
     } 
} 

之後,我試圖在該buttonhandler還打電話叫init方法添加的addActionListener方法。

 butSmall.addActionListener(ButtonHandler()); 

但是,這給了我錯誤。任何人都可以解釋如何完成這個練習?謝謝。

回答

1

我創建了一個按鈕處理程序類,並創建了構造函數(我認爲我做的正確)。

嗯不,你沒有做得對。類聲明它實現了ActionListener,但它實際上並沒有爲ActionListener.actionPerformed(ActionEvent)提供實現。如果它是abstract,它可以逃脫,但事實並非如此。 (如果它抽象的,那麼你將無法進行實例化。)

我對此表示懷疑之後。你提出的課程不會編譯,所以你沒有通過那個課。

我試圖在buttonhandler必須調用的init方法中添加addActionListener。

butSmall.addActionListener(ButtonHandler()); 

但是這給了我錯誤。

指定您收到的錯誤以及它們來自何處(即來自編譯器,本例中)將是您的優勢。如果編譯器甚至到了試圖分析那一行的地步,它可能會抱怨你試圖調用的構造函數不存在。您提交的一個構造函數需要Square類型的參數,但您試圖調用不帶任何參數的構造函數。

任何人都可以解釋如何完成 這個練習?

如果你正試圖從一個Squareinit()方法中調用該構造函數,你想傳遞給Squareinit()方法的引用進行調用,那麼您可以使用關鍵字this作爲論據。然而,再次,甚至在你可以達到那一點之前,你需要修復ButtonHandler

0

只需創建一個類實現ActionListener,具體爲actionPerformed(ActionEvent)函數。如果您需要指定參數,請使用您希望的參數創建一個自定義構造函數。此外,您的ButtonHandler類不是靜態的,因此您需要使用新的進行初始化。

檢查我下面的例子:

它的一個偵聽器需要一個JPanel和一個JFrame作爲參數和添加的JPanel到JFrame作爲它的內容窗格:

public class OpenScreenListener implements ActionListener { 

private JPanel panel; 
private JFrame window; 
@Override 
public void actionPerformed(ActionEvent e) { 
    window.setContentPane(panel); 
    window.setVisible(true); 
} 

public OpenScreenListener(JPanel panel, JFrame window){ 
    this.screen = panel 
    this.window = window; 
} 

}

而且這是我如何將它添加到按鈕:

myButton.addActionListener(new OpenScreenListener(new JPanel("myJPanel"), myJframe));

0

如果你看看ActionListener接口的JavaDoc,你會發現它需要你實現一個方法void actionPerformed(ActionEvent e)。您的自定義ButtonHandler尚未實現該方法,因此它不滿足ActionListener界面提供的合同。

添加塊這樣的:

@Override 
public void actionPerformed(ActionEvent e) { 
    //Do something here 
} 

上您的課。

請注意,在大多數情況下,按鈕的單擊偵聽器等小ActionListener實現爲匿名函數。關於如何編寫ActionListeners有一個不錯的"official" tutorial,請務必閱讀!

要真正實例化您的ButtonHandler的新實例,您需要Java關鍵字new,如new ButtonHandler()