1

JButton で ActionListener を設定するのに問題があります。コードは次のとおりです...

package pipes;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class PipesUI extends javax.swing.JFrame {

    Main main = new Main();

    JButton addPipeButton = new JButton("Add Pipe");

    public PipesUI(){
        addUI();
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    private void addUI(){
        addPipeButton.addActionListener(this);
    }

     public void actionPerformed(ActionEvent e){
      if (e.getSource()==addPipeButton)
          main.addPipe();
       else
          ;
    }

    public static void main(String args[]) {
        PipesUI pipesUI = new PipesUI(); //  create an instance of the menu
        pipesUI.setSize(500,500);
        pipesUI.setVisible(true);
    }
}

エラーは行 addPipeButton.addActionListener(this); にあります。

(これは)気に入らないようです。エラーには、「互換性のない型: PipesUI を ActionListener に変換できません」と表示されます。

どんな助けでも大歓迎です。

4

4 に答える 4

3
addPipeButton.addActionListener(this);

インスタンス メソッドまたはコンストラクター内でthisは、現在のオブジェクト (メソッドまたはコンストラクターが呼び出されているオブジェクト) への参照です。したがって、addActionListener(ActionListener)メソッドは実装された interface のインスタンスを期待していますActionListenerthis現在 のインスタンスを参照してaddActionListenerいる関数に渡す場合は、 でPipesUI実装されていませんActionListener

次のように実装ActionListenerします。

public class PipesUI extends javax.swing.JFrame implements ActionListener
{
 //your code


  @Override
  public void actionPerformed(ActionEvent e) {
    // your code
  }

}

addPipeButtonしかし、あなたのコードから、コンテナに追加したことがわかりません。次のようにボタンをフレームに追加するだけPipesUIです。add(addPipeButton)

private void addUI(){
    add(addPipeButton);    <--- adding pipe button
    addPipeButton.addActionListener(this);
}

これにより、ボタンがフレームのコンテンツ ペインにJframe.add(addPipeButton)追加され、デフォルトのレイアウト マネージャーになります。addPipeButtonBorderLayout

于 2013-11-08T17:50:04.527 に答える