Java 如何修复代码来计算每个按钮的点击次数?
我已经为我正在学习的Java类编写了一个带有两个按钮的程序。我现在需要计算并显示每个按钮的点击次数。我有一些计算点击次数的代码,但我相当肯定这是错误的 我的错误是“预期标识符”,如何修复此错误 这是我的更新代码:Java 如何修复代码来计算每个按钮的点击次数?,java,button,Java,Button,我已经为我正在学习的Java类编写了一个带有两个按钮的程序。我现在需要计算并显示每个按钮的点击次数。我有一些计算点击次数的代码,但我相当肯定这是错误的 我的错误是“预期标识符”,如何修复此错误 这是我的更新代码: import java.awt.*; import java.awt.event.*; public class FinalProj1 extends Frame implements ActionListener,WindowListener { FinalProj1()
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
)。我假设您删除了该方法以配合我的第二个解决方案,因此现在从您的实现列表中删除该接口,因为它不再需要。