我编写了一个程序,其中包含两个用于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");
}
}
答案 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的答案对于解决编译错误是正确的,所以在继续之前一定要先做。
关于您的实际计数器,您遇到的问题是numClicks
和numClicks2
变量在objButton1
或objButton2
为何时同时递增点击。这是因为它们由相同的事件处理程序方法处理。你有两个选择:
选项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;
}
});