Java 如何修复代码来计算每个按钮的点击次数?

Java 如何修复代码来计算每个按钮的点击次数?,java,button,Java,Button,我已经为我正在学习的Java类编写了一个带有两个按钮的程序。我现在需要计算并显示每个按钮的点击次数。我有一些计算点击次数的代码,但我相当肯定这是错误的 我的错误是“预期标识符”,如何修复此错误 这是我的更新代码: import java.awt.*; import java.awt.event.*; public class FinalProj1 extends Frame implements ActionListener,WindowListener { FinalProj1()

我已经为我正在学习的Java类编写了一个带有两个按钮的程序。我现在需要计算并显示每个按钮的点击次数。我有一些计算点击次数的代码,但我相当肯定这是错误的

我的错误是“预期标识符”,如何修复此错误

这是我的更新代码:

import java.awt.*;
import java.awt.event.*;

public class FinalProj1 extends Frame implements ActionListener,WindowListener {
    FinalProj1() {
        setTitle("Click Counter");
        setSize(400,400);
        show();
    }
    public static void main(String args[]) {
        Frame objFrame;
        Button objButton1;
        Button objButton2;
        TextField count = new TextField(20);
        TextField count2 = new TextField(20);
        Label objLabel;
        Label objLabel2;

        objFrame= new FinalProj1();
        objButton1= new Button("Agree");
        objButton2= new Button("Dissagree");
        objLabel= new Label();
        objLabel2= new Label();
        objLabel2.setText("Mexican Food Is Better Than Chineese Food");

        objButton1.setBounds(110,175,75,75);
        objButton2.setBounds(190,175,75,75);
        objLabel2.setBounds(80,95, 250,25);

        objFrame.add(objButton2);
        objFrame.add(objButton1);
        objFrame.add(objLabel2);
        objFrame.add(objLabel);
    }

    private int numClicks = 0;
    private int numClicks2 = 0;
    objButton1.addActionListener(this)
    objButton2.addActionListener(this)

    public void actionPerformed(ActionEvent e) {
        numClicks++;
        numClicks2++;
        count.setText("There are " + numClicks + " who agree");
        count2.setText("There are " + numClicks2 + " who dissagree");
    }
}
他所犯的错误(“预期的标识符”)在中指定

出现此错误是因为这两行代码在任何方法或初始值设定项块之外:

objButton1.addActionListener(this)
objButton2.addActionListener(this)
在创建两个控件之后,将它们放入构造函数中,您应该会没事。

他所犯的错误(“预期的标识符”)在中指定

出现此错误是因为这两行代码在任何方法或初始值设定项块之外:

objButton1.addActionListener(this)
objButton2.addActionListener(this)

在创建两个控件后,将它们放入构造函数中,您应该会很好。

首先,您应该将操作侦听器添加到每个按钮中(如上所述)。 但是,每当按下两个按钮中的一个时,两个计数都会递增,这是错误的。 因此,您应该像下面这样修改您的action-performed方法

public void actionPerformed(ActionEvent e)
{
    if(e.getSource().equals("Agree"))//if you push the button agree,increment only                          numClicks
    numClicks++;
    if(e.getSource().equal("Disagree"))//if you click on disagree,increment numClicks2
    numClicks2++;
    count.setText("There are " + numClicks + " who agree");
    count2.setText("There are " + numClicks2 + " who dissagree");
}

编辑顺便说一句,您正在实现windows侦听器方法吗?您必须这样做。

首先,您应该向每个按钮添加操作侦听器(如上所述)。 但是,每当按下两个按钮中的一个时,两个计数都会递增,这是错误的。 因此,您应该像下面这样修改您的action-performed方法

public void actionPerformed(ActionEvent e)
{
    if(e.getSource().equals("Agree"))//if you push the button agree,increment only                          numClicks
    numClicks++;
    if(e.getSource().equal("Disagree"))//if you click on disagree,increment numClicks2
    numClicks2++;
    count.setText("There are " + numClicks + " who agree");
    count2.setText("There are " + numClicks2 + " who dissagree");
}

编辑顺便说一句,您是否正在实施windows侦听器方法?您必须这样做。

一种方法是为每个按钮使用一个actionListener。试试这个:

objButton1.addActionListener(myFirstActionListener)
objButton2.addActionListener(mySecondActionListener)

ActionListener myFirstActionListener = new ActionListener {

    @Override
    public void actionPerformed(ActionEvent e) {

        numClicks++;

  }
}

ActionListener mySecondActionListener = new ActionListener {

    @Override
    public void actionPerformed(ActionEvent e) {

        numClicks2++;

  }
}

一种方法是每个按钮都有一个actionListener。试试这个:

objButton1.addActionListener(myFirstActionListener)
objButton2.addActionListener(mySecondActionListener)

ActionListener myFirstActionListener = new ActionListener {

    @Override
    public void actionPerformed(ActionEvent e) {

        numClicks++;

  }
}

ActionListener mySecondActionListener = new ActionListener {

    @Override
    public void actionPerformed(ActionEvent e) {

        numClicks2++;

  }
}

Jeroen的答案对于解决编译错误是正确的,所以在继续之前一定要先这样做

关于实际计数器,您遇到的问题是,每当单击
objButton1
objButton2
时,
numClicks
numClicks2
变量都会同时递增。这是因为它们由相同的事件处理程序方法处理。你有两个选择:

选项1:让单事件处理程序方法处理两次单击,但区分两次单击,只增加相关计数器,如下所示:

public void actionPerformed(ActionEvent e){
    if(e.getSource() == objButton1){
        numClicks++;
    } else {
        numClicks++;
    }
    // the rest if your method
}
选项2:为每个按钮指定单独的事件处理程序,如下所示:

objButton1.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e){
        numClicks++;
        // display your message to user
    }
});
objButton2.addActionListener(new ActionListrner(){
    public void actionPerformed(ActionEvent e){
        numClicks2++;
        // display your message to user;
    }
});

Jeroen的答案对于解决编译错误是正确的,所以在继续之前一定要先这样做

关于实际计数器,您遇到的问题是,每当单击
objButton1
objButton2
时,
numClicks
numClicks2
变量都会同时递增。这是因为它们由相同的事件处理程序方法处理。你有两个选择:

选项1:让单事件处理程序方法处理两次单击,但区分两次单击,只增加相关计数器,如下所示:

public void actionPerformed(ActionEvent e){
    if(e.getSource() == objButton1){
        numClicks++;
    } else {
        numClicks++;
    }
    // the rest if your method
}
选项2:为每个按钮指定单独的事件处理程序,如下所示:

objButton1.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e){
        numClicks++;
        // display your message to user
    }
});
objButton2.addActionListener(new ActionListrner(){
    public void actionPerformed(ActionEvent e){
        numClicks2++;
        // display your message to user;
    }
});

错误发生在objButton1.addActionListener(此)行上。老实说,我不知道stacktrace是什么。@Takendarkk:这不是同一个问题。stacktrace是导致异常的方法调用列表。这个问题不会有stacktrace:这段代码甚至没有编译。是的,我的错。当我把代码格式化得稍微好一点时,我就看到了错误。错误发生在objButton1.addActionListener(此)行上。老实说,我不知道stacktrace是什么。@Takendarkk:这不是同一个问题。stacktrace是导致异常的方法调用列表。这个问题不会有stacktrace:这段代码甚至没有编译。是的,我的错。当我把代码格式化得稍微好一点时,我就看到了这个错误。我得到的错误是“FinalProj1不是抽象的,并且没有覆盖java.awt.event.ActionEvent中的抽象方法actionPerformed(java.awt.event.ActionEvent)”“我如何解决这个问题?@user3233707您的类实现了
ActionListener
接口,这需要类实现某些方法(在本例中为
actionPerformed
)。我假设您删除了该方法以配合我的第二个解决方案,因此现在从您的实现列表中删除该接口,因为它不再需要。我收到错误“FinalProj1不是抽象的,并且不会覆盖java.awt.event.ActionListener中的抽象方法actionPerformed(java.awt.event.ActionEvent)”如何修复此问题?@user3233707您的类实现了
ActionListener
接口,该接口要求您的类实现某些方法(
actionPerformed
)。我假设您删除了该方法以配合我的第二个解决方案,因此现在从您的实现列表中删除该接口,因为它不再需要。