我有一个主类在这个类中实现MouseListener和TimerTask。如何在MouseEnter事件中运行此代码。我的意思是当鼠标超过帧Timer任务将执行指定的时间
public class NewClass extends JPanel implements MouseListener {
public NewClass() {
JFrame frame=new JFrame();
addMouseListener(this);
Timer t=new Timer();
TimerTask task=new TimerTask() {
@Override
public void run() {
System.out.println("heloo");
}
};
t.schedule(task, 1000);
}
@Override
public void mouseEntered(MouseEvent me) {
}
public static void main(String[]args){
JFrame frame=new JFrame();
frame.add(new NewClass());
frame.setSize(300,300);
frame.setVisible(true);
}
}
答案 0 :(得分:1)
始终使用 Swing Timer 进行与GUI相关的任务,如javadoc所述:
一般情况下,我们建议使用Swing计时器而不是 用于GUI相关任务的通用计时器,因为Swing计时器全部 共享相同的,预先存在的计时器线程和GUI相关的任务 自动在事件派发线程上执行。但是,你 如果你不打算触摸,可能会使用通用计时器 从定时器GUI,或需要执行冗长的处理。
阅读完本教程后,您将了解我的所作所为:
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
public class TimerDemo extends JFrame {
private static final long serialVersionUID = 1L;
private javax.swing.Timer timer;
public TimerDemo() {
super("Panel Timer Demo");
//initialing swing timer
timer = new javax.swing.Timer(100, getButtonAction());
JPanel p = new JPanel ();
p.addMouseListener(new MouseAdapter(){
@Override
public void mouseEntered(MouseEvent ev){
timer.start();
}
@Override
public void mouseExited(MouseEvent ev){
timer.stop();
}
});
p.setBackground(Color.blue);
getContentPane().add(p,BorderLayout.CENTER);
setDefaultCloseOperation(3);
setLocationRelativeTo(null);
pack();
}
private ActionListener getButtonAction() {
ActionListener action = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("Heloo");
}
};
return action;
}
public static void main(String... args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new TimerDemo().setVisible(true);
}
});
}
}