如何暂停Java Swing计时器?
我想在某个点停止如何暂停Java Swing计时器?,java,swing,timer,Java,Swing,Timer,我想在某个点停止计时器,然后从暂停点重新开始。方法stop(),start()不起作用 是否有暂停计时器然后恢复计时器的功能?我想它不存在 有没有人知道如何实现正确的计时器暂停 无法暂停计时器,只能停止并重新启动 你想完成什么? import java.awt.*; 导入java.awt.event.*; 导入java.awt.geom.*; 导入java.util.*; 导入javax.swing.*; 公共类延迟涂料{ 私人中心面板中心; 私有JFrame; 私人JPanel小组; 公共静态
计时器
,然后从暂停点重新开始。方法stop()
,start()
不起作用
是否有暂停计时器然后恢复计时器的功能?我想它不存在
有没有人知道如何实现正确的计时器
暂停 无法暂停计时器,只能停止并重新启动
你想完成什么?
import java.awt.*;
导入java.awt.event.*;
导入java.awt.geom.*;
导入java.util.*;
导入javax.swing.*;
公共类延迟涂料{
私人中心面板中心;
私有JFrame;
私人JPanel小组;
公共静态void main(字符串参数[]){
invokeLater(新的Runnable(){
@凌驾
公开募捐{
新建DelayedPaint().createAndShowGUI();
}
});
}
void createAndShowGUI(){
框架=新的JFrame(“延迟涂漆”);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
框架。设置尺寸(400400);
panel=newjpanel(newborderlayout());
frame.setContentPane(面板);
NorthPanel north=新的NorthPanel();
面板。添加(北,边界布局。北);
中心=新的中心面板();
panel.add(中心,BorderLayout.center);
frame.setVisible(true);
north.startTimer();
}
类NorthPanel扩展了JPanel{
私人JLabel-lb;
公共事务委员会(){
lb=新JLabel(“早上好”);
添加(磅);
}
公共无效startTimer(){
ActionListener taskPerformer=新建ActionListener(){
@凌驾
已执行的公共无效操作(操作事件evt){
setLayout(新的FlowLayout(FlowLayout.LEFT));
lb.setText(“左”);
//timer.stop();//如果setRepeats(false),则不需要。
startTimer();
}
};
javax.swing.Timer Timer=新的javax.swing.Timer(2000,taskPerformer);
timer.setRepeats(假);
timer.start();
}
}
类CenterPanel扩展了JPanel{
私人互联网;
私有字体boldFont=新字体(“对话框”,Font.BOLD,15);
私人物业;
私有javax.swing.Timer;
公共中心面板(){
centerProps=新属性();
centerProps.setProperty(“圆”、“假”);
setProperty(“lastString”、“0”);
}
@凌驾
公共组件(图形g){
超级组件(g);
图形2d g2=(图形2d)g;
if(Boolean.valueOf(centerProps.getProperty(“圆”)){
尺寸标注=frame.getSize();
g2.绘制(新的Arc2D.Double(50,25,尺寸高度-100,尺寸宽度-100,0,360,Arc2D.OPEN));
}
int j=Integer.parseInt(centerProps.getProperty(“lastString”);
如果(j>0){
g2.设置字体(粗体字体);
对于(int i=1;i我不知道如何真正“暂停”一个摆动计时器,但有简单的方法可以模拟它。我知道的最简单的方法是在计时器中的所有动作周围加上:
if(!paused) {
// place code here.
System.out.println("I am not Paused.");
} else {
System.out.println("I am Paused.");
}
在程序中使用的示例如下:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;
public class ExampleClass implements ActionListener {
static boolean paused = false;
// delay in miliseconds.
static int delay = 5;
static Timer timer = new Timer(delay, new ExampleClass());
static JFrame jf = new JFrame();
static JPanel jp = new JPanel();
static JButton pause = new JButton("PAUSE");
static JButton unpause = new JButton("UNPAUSE");
public static void main(String[] args) {
System.out.println("Starting Program...");
pause.addActionListener(new ExampleClass());
unpause.addActionListener(new ExampleClass());
jp.add(pause);
jp.add(unpause);
jf.setSize(100, 100);
jf.setTitle("Window");
jf.setResizable(false);
jf.setLocationRelativeTo(null);
jf.setDefaultCloseOperation(jf.EXIT_ON_CLOSE);
jf.add(jp);
jf.setVisible(true);
timer.start();
}
@Override
public void actionPerformed(ActionEvent e) {
if(!paused) {
System.out.println("IM NOT PAUSED!!! YAY!!!!");
if(e.getSource() == pause) {
paused = true;
}
} else {
System.out.println("urk... can't move... help me...");
if(e.getSource() == unpause) {
paused = false;
}
}
}
}
就这样。
此外,您还可以(显然)使用getter和setter来代替暂停和取消暂停的按钮。当您使用stop()
和start()
方法时会发生什么?可能重复我尝试了@yati提供的链接中链接的示例,该链接使用了stop/start,并且在我的计算机上确实有效。
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;
public class ExampleClass implements ActionListener {
static boolean paused = false;
// delay in miliseconds.
static int delay = 5;
static Timer timer = new Timer(delay, new ExampleClass());
static JFrame jf = new JFrame();
static JPanel jp = new JPanel();
static JButton pause = new JButton("PAUSE");
static JButton unpause = new JButton("UNPAUSE");
public static void main(String[] args) {
System.out.println("Starting Program...");
pause.addActionListener(new ExampleClass());
unpause.addActionListener(new ExampleClass());
jp.add(pause);
jp.add(unpause);
jf.setSize(100, 100);
jf.setTitle("Window");
jf.setResizable(false);
jf.setLocationRelativeTo(null);
jf.setDefaultCloseOperation(jf.EXIT_ON_CLOSE);
jf.add(jp);
jf.setVisible(true);
timer.start();
}
@Override
public void actionPerformed(ActionEvent e) {
if(!paused) {
System.out.println("IM NOT PAUSED!!! YAY!!!!");
if(e.getSource() == pause) {
paused = true;
}
} else {
System.out.println("urk... can't move... help me...");
if(e.getSource() == unpause) {
paused = false;
}
}
}
}