2016-11-27 85 views
0

這個代碼有問題,它不能編譯。你可以幫幫我嗎 ? 我需要關閉的JFrame當我按一下按鈕用JButton關閉JFrame

public class SlotMachine extends JFrame 
{ 
    /* 
    * 
    */ 
    JButton btnExit = new JButton("Exit"); 
    btnExit.addMouseListener(new MouseAdapter() 
    { 
     @Override 
     public void mouseClicked(MouseEvent arg0) 
     { 
      this.dispose(); 
     } 
    }); 
} 

的錯誤是= 的方法Dispose()是未定義的類型新MouseAdapter(){}

我不知道如何從方法的mouseClicked

+0

如果不是編譯,你不知道爲什麼,那麼發佈完整的錯誤信息是有道理的,不是嗎? –

+0

另一個問題:從來沒有使用MouseListener進行此操作,而是將一個ActionListener添加到JButton中,原因有很多。 –

+0

擺脫'this'。而已。或者用'SlotMachine.this'指定*哪個*'this'。 –

回答

1

你調用this.dispose();這裏的關鍵之處在於this指的是內部類中,MouseListener的獲得SlotMachine對象,MouseListener的沒有一個dispose()方法。

解決方案:擺脫this,它應該工作,因爲如果內部類不包含該方法,編譯器將查看外部類。或者,您可以指定其中您的意思是:SlotMachine.this.dispose();將告訴編譯器調用外部SlotMachine類的方法。

使用上一個JButton一個ActionListener有以下幾個原因:按鈕的

  • 默認行爲是通過按空格鍵來激活按鈕是否集中。這對於MouseListener不起作用。
  • 此外,預期的行爲是,如果按鈕通過setEnabled(false)被禁用,然後按它不應導致行動被解僱。這不適用於MouseListener,但適用於ActionListener。
  • 您可以輕鬆與其他組件(包括JMenuItems)共享ActionListener(或更好的AbstractAction)。
+0

謝謝,但即使我使用ActionListener,我必須使用SlotMachine.this.dispose()? – Yuri

+0

@Yuri:當然可以。你仍然在使用一個匿名的內部類。否則,只需使用'dispose();' –

+0

謝謝我也在java文檔中研究了這一點,並知道它的工作原理:) – Yuri