在我的在线Java课程中,我需要编写一个程序来计算框架内按钮上的鼠标点击次数。这是我的代码:
import java.awt.*;
import java.awt.event.*;
public class option1 extends Frame {
option1() {
setTitle("Final Project Option 1");
setSize(300,300);
show();
}
public static void main(String[] args) {
option1 test = new option1();
int a = 0;
String s1 = "" + a;
Frame objFrame;
Button objButton1;
Label objLabel1;
objFrame = new option1();
objButton1 = new Button("Button");
objLabel1 = new Label();
objLabel1.setBounds(150,220,50,30);
objButton1.setBounds(40,35,50,50);
objLabel1.setText(s1);
objButton1.addMouseListener(new MyMouseListener()); //line 29
objFrame.add(objLabel1);
objFrame.add(objButton1);
}
public class MyMouseListener extends MouseAdapter {
public void mouseClicked(MouseEvent me) {
a++; //line 36
}
}
}
编译时,我收到两个错误。第29行有一个错误,即#34;非静态变量,这不能从静态上下文引用#34;而另一个错误是在第36行,这是"找不到符号"。
那么,我究竟做错了什么?我希望响应者能够准确地告诉我需要做些什么来解决问题,并避免使用技术术语,因为我对编程很新。
答案 0 :(得分:1)
我看到两个问题,即你的内部类应该是static
(使用它而不是option1
的实例,它应该是Option1
以符合Java命名约定)而你需要定义和初始化a
。像
public static class MyMouseListener extends MouseAdapter {
int a = 0; //<-- add this.
public void mouseClicked(MouseEvent me) {
a++;
}
}
此外,我建议您考虑使用更现代的JFrame
而不是旧的Frame
。
修改强>
您需要保存对MouseListener
的引用
MyMouseListener mml = new MyMouseListener();
objButton1.addMouseListener(mml);
然后你可以得到a
喜欢的
System.out.println(mml.a);
最后,"" + a
的原始方法是"0"
。
答案 1 :(得分:1)
通常,尽可能快地将main
方法退出到非静态上下文中......
public class option1 extends Frame {
private int a = 0;
private Label objLabel1;
option1() {
setTitle("Final Project Option 1");
setSize(300,300);
Button objButton1;
objButton1 = new Button("Button");
objLabel1 = new Label();
objLabel1.setBounds(150,220,50,30);
objButton1.setBounds(40,35,50,50);
objLabel1.setText(Integer.toString(a));
objButton1.addMouseListener(new MyMouseListener()); //line 29
add(objLabel1);
add(objButton1);
show();
}
public static void main(String[] args) {
option1 test = new option1();
}
public class MyMouseListener extends MouseAdapter {
public void mouseClicked(MouseEvent me) {
a++; //line 36
objLabel1.setText(Integer.toString(a));
}
}
}
ActionListener
,因为鼠标不是触发按钮的唯一方式答案 2 :(得分:0)
我只是想让你的代码正常工作。但是标准Java编码存在一些问题。但是你应该考虑以前关于编码风格的答案。
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
public class Main {
public static void main(String[] args) {
final Frame mainFrame = new OptionOne();
Button button = new Button("Button");
final Label label = new Label();
label.setBounds(150, 220, 50, 30);
label.setText("0");
button.setBounds(40, 35, 50, 50);
label.addPropertyChangeListener(label.getText(), new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent evt) {
mainFrame.addNotify();
}
});
button.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {
int value = Integer.parseInt(label.getText());
label.setText(String.valueOf(value + 1));
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
});
mainFrame.add(label);
mainFrame.add(button);
}
}
class OptionOne extends Frame {
OptionOne() {
setTitle("Final Project Option 1");
setSize(300, 300);
show();
}
}