java窗口监听
最近写java窗体遇到一个问题,是关于鼠标监听的,我感觉自己写的代码没有错,我就是想只要鼠标一进入到窗体中的按钮上时,就开始计数,分别记录鼠标进入按钮多少次,鼠标点击按钮...
最近写java窗体遇到一个问题,是关于鼠标监听的,我感觉自己写的代码没有错,我就是想只要鼠标一进入到窗体中的按钮上时,就开始计数,分别记录鼠标进入按钮多少次,鼠标点击按钮多少次。 代码写完了编译通过没有报错,但是当我试验的时候却发现鼠标到指定的组件上并没有看到自己想要的效果。我重复很多次检查错误,都没有发现,所以特来请教高手。代码如下:
import java.awt.*;
import java.awt.event.*;
public class MouseEvent {
private static Frame f;
private static Button b;
public static void test() {
f = new Frame("鼠标事件监听窗口");
b = new Button("转到");
f.setBounds(300,200,500,300);
f.setLayout(new FlowLayout());
b.setBackground(Color.white);
f.add(b);
f.setVisible(true);
}
//添加监听器
public static void myEvent() {
//添加窗口关闭监听
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent w) {
System.out.println("此窗口在3秒内关闭!");
try {
Thread t = new Thread();
t.sleep(3000);
}catch(Exception e) {
System.out.println("关闭窗口时错误!");
e.printStackTrace();
}
System.exit(0);
}
});
//添加鼠标监听
b.addMouseListener(new MouseAdapter() {
int i = 1; int j = 1;
//重写鼠标进入按键方法
public void mouseEntered() {
System.out.println("鼠标进入当前按键"+i+++"次");
}
//重写鼠标点击按钮方法
public void mousePressed() {
System.out.println("鼠标点击当前按键"+j+++"次");
}
});
}
public static void main(String args[]) {
test();
myEvent();
}
}
问题主要是出在重写鼠标监听的两个方法上,因为别的地方没有问题,在Eclipse上运行时提示一个问题,所以附图一张,以供各位参考。先行谢过! 展开
import java.awt.*;
import java.awt.event.*;
public class MouseEvent {
private static Frame f;
private static Button b;
public static void test() {
f = new Frame("鼠标事件监听窗口");
b = new Button("转到");
f.setBounds(300,200,500,300);
f.setLayout(new FlowLayout());
b.setBackground(Color.white);
f.add(b);
f.setVisible(true);
}
//添加监听器
public static void myEvent() {
//添加窗口关闭监听
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent w) {
System.out.println("此窗口在3秒内关闭!");
try {
Thread t = new Thread();
t.sleep(3000);
}catch(Exception e) {
System.out.println("关闭窗口时错误!");
e.printStackTrace();
}
System.exit(0);
}
});
//添加鼠标监听
b.addMouseListener(new MouseAdapter() {
int i = 1; int j = 1;
//重写鼠标进入按键方法
public void mouseEntered() {
System.out.println("鼠标进入当前按键"+i+++"次");
}
//重写鼠标点击按钮方法
public void mousePressed() {
System.out.println("鼠标点击当前按键"+j+++"次");
}
});
}
public static void main(String args[]) {
test();
myEvent();
}
}
问题主要是出在重写鼠标监听的两个方法上,因为别的地方没有问题,在Eclipse上运行时提示一个问题,所以附图一张,以供各位参考。先行谢过! 展开
2个回答
展开全部
点击事件是 b.addActionListener(new ActionListener() {
你用错了侦听器,给你改了一下.
--------------------------------------------------------------------
import java.awt.Button;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class MouseEvent {
private static Frame f;
private static Button b;
private static int index = 1;
public static void test() {
f = new Frame("鼠标事件监听窗口");
b = new Button("转到");
f.setBounds(300, 200, 500, 300);
f.setLayout(new FlowLayout());
b.setBackground(Color.white);
f.add(b);
f.setVisible(true);
}
// 添加监听器
public static void myEvent() {
// 添加窗口关闭监听
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent w) {
System.out.println("此窗口在3秒内关闭!");
try {
Thread t = new Thread();
t.sleep(3000);
} catch (Exception e) {
System.out.println("关闭窗口时错误!");
e.printStackTrace();
}
System.exit(0);
}
});
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("鼠标进入当前按键" + index++ + "次");
}
});
// 添加鼠标监听
b.addMouseListener(new MouseAdapter() {
int i = 1;
int j = 1;
// 重写鼠标进入按键方法
public void mouseEntered() {
System.out.println("鼠标进入当前按键" + i++ + "次");
}
// 重写鼠标点击按钮方法
public void mousePressed() {
System.out.println("鼠标点击当前按键" + j++ + "次");
}
});
}
public static void main(String args[]) {
test();
myEvent();
}
}
你用错了侦听器,给你改了一下.
--------------------------------------------------------------------
import java.awt.Button;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class MouseEvent {
private static Frame f;
private static Button b;
private static int index = 1;
public static void test() {
f = new Frame("鼠标事件监听窗口");
b = new Button("转到");
f.setBounds(300, 200, 500, 300);
f.setLayout(new FlowLayout());
b.setBackground(Color.white);
f.add(b);
f.setVisible(true);
}
// 添加监听器
public static void myEvent() {
// 添加窗口关闭监听
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent w) {
System.out.println("此窗口在3秒内关闭!");
try {
Thread t = new Thread();
t.sleep(3000);
} catch (Exception e) {
System.out.println("关闭窗口时错误!");
e.printStackTrace();
}
System.exit(0);
}
});
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("鼠标进入当前按键" + index++ + "次");
}
});
// 添加鼠标监听
b.addMouseListener(new MouseAdapter() {
int i = 1;
int j = 1;
// 重写鼠标进入按键方法
public void mouseEntered() {
System.out.println("鼠标进入当前按键" + i++ + "次");
}
// 重写鼠标点击按钮方法
public void mousePressed() {
System.out.println("鼠标点击当前按键" + j++ + "次");
}
});
}
public static void main(String args[]) {
test();
myEvent();
}
}
追问
谢谢您的回答,addActionListener这个方法是活动监听,跟我这个鼠标监听不冲突的,二楼说得对,可能是类名冲突的问题,我改改看,呵呵
追答
嗯,是那样的。侦听方法的问题
展开全部
你写错方法名了。。
public void mouseEntered(MouseEvent e)
public void mousePressed(MouseEvent e)
还有你这个类名MouseEvent 和java.awt.event.MouseEvent同名了。
在new MouseAdapter() { }里这样写才行:
public void mouseEntered(java.awt.event.MouseEvent e)
public void mousePressed(java.awt.event.MouseEvent e)
找了半天才找到原来是类名的问题。。类名最好不要和jdk里的类名字重复了。
还有我感觉这里所有的方法和成员变量都写成static,不太妥。(虽然在这里不会导致任何错误)
public void mouseEntered(MouseEvent e)
public void mousePressed(MouseEvent e)
还有你这个类名MouseEvent 和java.awt.event.MouseEvent同名了。
在new MouseAdapter() { }里这样写才行:
public void mouseEntered(java.awt.event.MouseEvent e)
public void mousePressed(java.awt.event.MouseEvent e)
找了半天才找到原来是类名的问题。。类名最好不要和jdk里的类名字重复了。
还有我感觉这里所有的方法和成员变量都写成static,不太妥。(虽然在这里不会导致任何错误)
追问
谢谢您的回答,我现在明白了,很有可能是类名冲突的问题,呵呵,我改一下试试看,我费了很大劲都没有找到问题所在。static一般用在什么场合下?我不是太明白
追答
static 是类变量和类方法的修饰符,在类被jvm加载的时候就初始化。非static变量在对象被new出来的时候才分配内存空间。
并且如果是类变量,多个对象共享的同一份数据。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询