2016-11-27 26 views
0

このコードに問題があり、コンパイルできません。私たちを手伝ってくれますか ?私は、メソッドDispose(= iに誤差があるボタンをJFrameをJButtonで閉じる

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

をクリックしたときのJFrameを閉じる必要があり は)タイプの新しいMouseAdapterの(ための定義されていません){}

私はどのように知りませんあなたはthisは、内部クラス、のMouseListenerを指し、そしてのMouseListenerはdispose()メソッドを持っていないということで、ここでthis.dispose();キーを呼んでいるのmouseClickedメソッドから

+0

コンパイルが行われず、理由がわからない場合は、完全なエラーメッセージを投稿するのがいいでしょうか? –

+0

問題:これにMouseListenerを使用しないでください。代わりにいくつかの理由でActionListenerをJButtonに追加してください。 –

+0

「this」を取り除く。それでおしまい。あるいは、SlotMachine.thisで* which * 'this'を指定してください。 –

答えて

1

をSlotMachineオブジェクトを取得します。

ソリューション: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

関連する問題