无法在JPanel中添加动作侦听器

时间:2016-03-09 05:32:12

标签: java swing jframe jpanel listener

我不断收到错误,我无法向对象添加动作侦听器。我正在尝试将其添加到我的主框架中,以便将其设置在正确的位置。

public class Grid extends JPanel{
    public Grid (String title){
       setLayout(null);
       setSize(295,295);
       setLocation(10,10);
       buttons = new JButton[5][5];
       for(int row=0; row<5; row++) {
          for(int col=0; col<5; col++) {
              buttons[row][col] = new JButton();
              buttons[row][col].setLocation(5+col*55, 5+row*55);
              buttons[row][col].setSize(50,50);
              buttons[row][col].setBackground(colours[randCol()]);
              buttons[row][col].addActionListener(this);
              add(buttons[row][col]);
          }
       }
   }
}

4 个答案:

答案 0 :(得分:4)

  

我已经在网格类中实现了actionlistener并且我收到了这个,cgame.Grid不是抽象的,并且不会覆盖java.awt.event.ActionListener中的抽象方法actionPerformed(java.awt.event.ActionEvent)

这是因为每当一个类实现一个接口时,它需要从接口 覆盖 所有可用的抽象方法(无论你是否有兴趣使用它)

ActionListener的界面下,有一个抽象方法

actionPerformed(ActionEvent)

如果 Grid 类实现了 ActionListener ,那么它也会覆盖它:

class Grid extends JPanel implements ActionListener{

    //your other attributes, initializations & constructors..

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

我建议你为Grid类使用Layout。从您的班级Grid的命名。如果您打算将组件排列成类似大小的框(或网格),则可以考虑使用 GridLayout 。或者,如果您的某些网格具有不同的宽度和/或高度,您可以考虑 GridBagLayout

答案 1 :(得分:0)

您必须在Grid类中实现ActionListener类。只有这样,您才能将传递给addActionListener()方法。

答案 2 :(得分:0)

你必须实现ActionListener类

chartPanel.getChartRenderingInfo().getPlotInfo().getDataArea().getWidth();

现在工作正常

答案 3 :(得分:0)

ActionListener是一个接口,因此您必须覆盖所有方法。我认为这很明显,这就是为什么我没有明确指出这一点。对不起,但你必须知道。如果你有implements,那么它总是一个接口,你必须实现它包含的所有方法。这是Java中的基本规则之一。