Java ActionListener错误:不兼容的类型

Java ActionListener错误:不兼容的类型,java,swing,jbutton,actionlistener,Java,Swing,Jbutton,Actionlistener,我在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 Pi

我在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(此)

(这)它似乎不喜欢,错误是“不兼容的类型:PipesUI无法转换为ActionListener”


任何帮助都很好,谢谢

您创建了
actionPerformed
方法,但没有将类声明为
ActionListener
。实现该接口:

public class PipesUI extends javax.swing.JFrame implements ActionListener {

您创建了
actionPerformed
方法,但没有将类声明为
ActionListener
。实现该接口:

public class PipesUI extends javax.swing.JFrame implements ActionListener {

我猜您在另一个地方看到了
addActionListener(这个)
,并决定在这里使用它。另一个地方是一个完全不同的环境,因为
这个
是ActionListner的一个实例

按以下步骤进行:

addPipeButton.addActionListener(new ActionListner(){
    public void actionPerformed(ActionEvent e){
        //handle `e`
    }
});
public class PipesUI extends javax.swing.JFrame implements ActionListener
{
 //your code


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

}
编辑:类中已经有
ActionListener
方法。在这种情况下,您可以使用:

public class PipesUI extends javax.swing.JFrame implements ActionListener {

我猜您在另一个地方看到了
addActionListener(这个)
,并决定在这里使用它。另一个地方是一个完全不同的环境,因为
这个
是ActionListner的一个实例

按以下步骤进行:

addPipeButton.addActionListener(new ActionListner(){
    public void actionPerformed(ActionEvent e){
        //handle `e`
    }
});
public class PipesUI extends javax.swing.JFrame implements ActionListener
{
 //your code


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

}
编辑:类中已经有
ActionListener
方法。在这种情况下,您可以使用:

public class PipesUI extends javax.swing.JFrame implements ActionListener {
一种可能的解决办法:

public class PipesUI extends javax.swing.JFrame implements ActionListener{
 //implement the relevant methods
另一个:

private void addUI(){
    addPipeButton.addActionListener(new ActionListener(){
        //anonymous actionlistener implementation
    };
}
等等等等

一种可能的解决方案:

public class PipesUI extends javax.swing.JFrame implements ActionListener{
 //implement the relevant methods
addPipeButton.addActionListener(this);
另一个:

private void addUI(){
    addPipeButton.addActionListener(new ActionListener(){
        //anonymous actionlistener implementation
    };
}
等等等等

addPipeButton.addActionListener(this);
在实例方法或构造函数中,
是对当前对象的引用,即调用其方法或构造函数的对象。因此,
addActionListener(ActionListener)
方法需要一个接口
ActionListener
的实现实例。当您将
传递给
addActionListener
函数时,该函数当前引用的是
PipesUI的实例。
未使用
ActionListener
实现

执行
ActionListener
,如下所示:

addPipeButton.addActionListener(new ActionListner(){
    public void actionPerformed(ActionEvent e){
        //handle `e`
    }
});
public class PipesUI extends javax.swing.JFrame implements ActionListener
{
 //your code


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

}
但是从您的代码中,我看不到您已将
addPipeButton
添加到任何容器中。只需使用
add(addPipeButton)
将按钮添加到您的框架中,如下所示:

private void addUI(){
    add(addPipeButton);    <--- adding pipe button
    addPipeButton.addActionListener(this);
}
private void addUI(){
添加(添加管道按钮);
在实例方法或构造函数中,
是对当前对象的引用,即调用其方法或构造函数的对象。因此,
addActionListener(ActionListener)
方法需要一个接口
ActionListener
的已实现实例。当您将
传递给
addActionListener
函数时,该函数当前引用的是
的实例,但未使用
ActionListener
实现

执行
ActionListener
,如下所示:

addPipeButton.addActionListener(new ActionListner(){
    public void actionPerformed(ActionEvent e){
        //handle `e`
    }
});
public class PipesUI extends javax.swing.JFrame implements ActionListener
{
 //your code


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

}
但是从您的代码中,我看不到您已将
addPipeButton
添加到任何容器中。只需使用
add(addPipeButton)
将按钮添加到框架
PipesUI
,如下所示:

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

add(addPipeButton);这是什么
?那是什么类型的引用?@SotiriosDelimanolis我真的不知道…这是我第一次使用actionlisteners,我看到了“这”以前写在那些括号里,所以我只是用了它们,括号里应该放什么?我的JFrame上也没有出现按钮,是什么造成的?这是什么<代码>这<代码>?那是什么类型的引用?@SotiriosDelimanolis我真的不知道…这是我第一次使用actionlisteners,我看到了“这”以前写在这些括号中,所以我只是使用了它们,括号中应该放什么?我的JFrame上也没有出现按钮,是什么原因造成的?谢谢,这解决了错误,但我的按钮仍然没有显示在JFrame上,为什么会这样?我不知道你在哪里将
JButton
添加到你的
JFrame
。这非常有用再次anks!谢谢,这解决了错误,但我的按钮仍然没有显示在JFrame上,这是为什么?我不知道您在哪里将
JButton
添加到了您的
JFrame
。这非常有帮助!再次感谢!