java timer 失效_如何暂停Java Swing Timer?

javax.swing.Timer.setDelay(int);

import java.awt.*;

import java.awt.event.*;

import java.awt.geom.*;

import java.util.*;

import javax.swing.*;

public class DelayedPaint {

private CenterPanel center;

private JFrame frame;

private JPanel panel;

public static void main(String args[]) {

EventQueue.invokeLater(new Runnable() {

@Override

public void run() {

new DelayedPaint().createAndShowGUI();

}

});

}

void createAndShowGUI() {

frame = new JFrame("Delayed Paint");

frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

frame.setSize(400, 400);

panel = new JPanel(new BorderLayout());

frame.setContentPane(panel);

NorthPanel north = new NorthPanel();

panel.add(north, BorderLayout.NORTH);

center = new CenterPanel();

panel.add(center, BorderLayout.CENTER);

frame.setVisible(true);

north.startTimer();

}

class NorthPanel extends JPanel {

private JLabel lb;

public NorthPanel() {

lb = new JLabel("Good morning");

add(lb);

}

public void startTimer() {

ActionListener taskPerformer = new ActionListener() {

@Override

public void actionPerformed(ActionEvent evt) {

setLayout(new FlowLayout(FlowLayout.LEFT));

lb.setText("Left");

// timer.stop(); // Not needed if setRepeats(false).

center.startTimer();

}

};

javax.swing.Timer timer = new javax.swing.Timer(2000, taskPerformer);

timer.setRepeats(false);

timer.start();

}

}

class CenterPanel extends JPanel {

private int icnt;

private Font boldFont = new Font("Dialog", Font.BOLD, 15);

private Properties centerProps;

private javax.swing.Timer timer;

public CenterPanel() {

centerProps = new Properties();

centerProps.setProperty("circle", "false");

centerProps.setProperty("lastString", "0");

}

@Override

public void paintComponent(Graphics g) {

super.paintComponent(g);

Graphics2D g2 = (Graphics2D) g;

if (Boolean.valueOf(centerProps.getProperty("circle"))) {

Dimension dim = frame.getSize();

g2.draw(new Arc2D.Double(50, 25, dim.height - 100, dim.width - 100, 0, 360, Arc2D.OPEN));

}

int j = Integer.parseInt(centerProps.getProperty("lastString"));

if (j > 0) {

g2.setFont(boldFont);

for (int i = 1; i <= j; i++) {

g2.drawString("" + (char) (i + 48), i * 10, 50);

}

}

}

public void startTimer() {

ActionListener taskPerformer = new ActionListener() {

@Override

public void actionPerformed(ActionEvent evt) {

repaint(); // in paintComponent(...) icnt is already icnt+1.

icnt++;

if (icnt == 1) {

centerProps.setProperty("circle", "true");

timer.setDelay(500);

} else if (icnt <= 10) {

centerProps.setProperty("lastString", String.valueOf(icnt - 1));

if (icnt == 10) {

timer.stop();

}

}

}

};

timer = new javax.swing.Timer(2000, taskPerformer);

timer.start();

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值