如何暂停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;
     }
 }


}
}