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

时间:2014-01-24 23:37:46

标签: java button

我编写了一个程序,其中包含两个用于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");
    }
}

4 个答案:

答案 0 :(得分:4)

他所拥有的错误(“预期的标识符”)在the previous question中指定。

您收到此错误,因为这两行代码在任何方法或初始化程序块之外:

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

在创建两个控件后将它们放在构造函数中,你应该没问题。

答案 1 :(得分:0)

首先,您应该为每个按钮添加动作侦听器(如上所述)。 但是,只要按下其中一个按钮,就会递增两个计数,这是错误的。 因此,您应该将您执行的操作方法修改为smthg,如此

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");
}

EDIT-Btw,您是否正在实现Windows侦听器方法?您必须。

答案 2 :(得分:0)

一种方法是为每个按钮设置一个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++;

  }
}

答案 3 :(得分:0)

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

关于您的实际计数器,您遇到的问题是numClicksnumClicks2变量在objButton1objButton2为何时同时递增点击。这是因为它们由相同的事件处理程序方法处理。你有两个选择:

选项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;
    }
});