<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java_Tutorial%2FSwing%2FSwing_Timer</id>
		<title>Java Tutorial/Swing/Swing Timer - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java_Tutorial%2FSwing%2FSwing_Timer"/>
		<link rel="alternate" type="text/html" href="http://jexp.ru/index.php?title=Java_Tutorial/Swing/Swing_Timer&amp;action=history"/>
		<updated>2026-04-10T14:46:43Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://jexp.ru/index.php?title=Java_Tutorial/Swing/Swing_Timer&amp;diff=3851&amp;oldid=prev</id>
		<title> в 17:44, 31 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://jexp.ru/index.php?title=Java_Tutorial/Swing/Swing_Timer&amp;diff=3851&amp;oldid=prev"/>
				<updated>2010-05-31T17:44:27Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 17:44, 31 мая 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
			</entry>

	<entry>
		<id>http://jexp.ru/index.php?title=Java_Tutorial/Swing/Swing_Timer&amp;diff=3852&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://jexp.ru/index.php?title=Java_Tutorial/Swing/Swing_Timer&amp;diff=3852&amp;oldid=prev"/>
				<updated>2010-05-31T15:31:54Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== 14. A rotating and scaling rectangle. ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.Graphics;&lt;br /&gt;
import java.awt.Graphics2D;&lt;br /&gt;
import java.awt.Rectangle;&lt;br /&gt;
import java.awt.RenderingHints;&lt;br /&gt;
import java.awt.event.ActionEvent;&lt;br /&gt;
import java.awt.event.ActionListener;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JPanel;&lt;br /&gt;
import javax.swing.Timer;&lt;br /&gt;
public class SwingTimerBasedAnimationScaleRotate extends JPanel implements ActionListener {&lt;br /&gt;
  Timer timer;&lt;br /&gt;
  private double angle = 0;&lt;br /&gt;
  private double scale = 1;&lt;br /&gt;
  private double delta = 0.01;&lt;br /&gt;
  Rectangle.Float r = new Rectangle.Float(20, 20, 200, 200);&lt;br /&gt;
  public SwingTimerBasedAnimationScaleRotate() {&lt;br /&gt;
    timer = new Timer(10, this);&lt;br /&gt;
    timer.start();&lt;br /&gt;
  }&lt;br /&gt;
  public void paint(Graphics g) {&lt;br /&gt;
    int h = getHeight();&lt;br /&gt;
    int w = getWidth();&lt;br /&gt;
    Graphics2D g2d = (Graphics2D) g;&lt;br /&gt;
    g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);&lt;br /&gt;
    g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);&lt;br /&gt;
    g2d.translate(w / 2, h / 2);&lt;br /&gt;
    g2d.rotate(angle);&lt;br /&gt;
    g2d.scale(scale, scale);&lt;br /&gt;
    g2d.fill(r);&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    JFrame frame = new JFrame(&amp;quot;Moving star&amp;quot;);&lt;br /&gt;
    frame.add(new SwingTimerBasedAnimationScaleRotate());&lt;br /&gt;
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    frame.setSize(420, 250);&lt;br /&gt;
    frame.setLocationRelativeTo(null);&lt;br /&gt;
    frame.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
  public void actionPerformed(ActionEvent e) {&lt;br /&gt;
    if (scale &amp;lt; 0.01) {&lt;br /&gt;
      delta = -delta;&lt;br /&gt;
    } else if (scale &amp;gt; 0.99) {&lt;br /&gt;
      delta = -delta;&lt;br /&gt;
    }&lt;br /&gt;
    scale += delta;&lt;br /&gt;
    angle += 0.01;&lt;br /&gt;
    repaint();&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 14. Fade out an image: image gradually get more transparent until it is completely invisible. ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.AlphaComposite;&lt;br /&gt;
import java.awt.Graphics;&lt;br /&gt;
import java.awt.Graphics2D;&lt;br /&gt;
import java.awt.Image;&lt;br /&gt;
import java.awt.event.ActionEvent;&lt;br /&gt;
import java.awt.event.ActionListener;&lt;br /&gt;
import javax.swing.ImageIcon;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JPanel;&lt;br /&gt;
import javax.swing.Timer;&lt;br /&gt;
public class FadeOutImage extends JPanel implements ActionListener {&lt;br /&gt;
  Image myImage = new ImageIcon(&amp;quot;a.jpg&amp;quot;).getImage();&lt;br /&gt;
  Timer timer = new Timer(20, this);&lt;br /&gt;
  private float alpha = 1f;&lt;br /&gt;
  public FadeOutImage() {&lt;br /&gt;
    timer.start();&lt;br /&gt;
  }&lt;br /&gt;
  public void paint(Graphics g) {&lt;br /&gt;
    super.paint(g);&lt;br /&gt;
    Graphics2D g2d = (Graphics2D) g;&lt;br /&gt;
    g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha));&lt;br /&gt;
    g2d.drawImage(myImage, 10, 10, null);&lt;br /&gt;
  }&lt;br /&gt;
  public void actionPerformed(ActionEvent e) {&lt;br /&gt;
    alpha += -0.01f;&lt;br /&gt;
    if (alpha &amp;lt;= 0) {&lt;br /&gt;
      alpha = 0;&lt;br /&gt;
      timer.stop();&lt;br /&gt;
    }&lt;br /&gt;
    repaint();&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    JFrame frame = new JFrame(&amp;quot;Fade out&amp;quot;);&lt;br /&gt;
    frame.add(new FadeOutImage());&lt;br /&gt;
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    frame.setSize(300, 250);&lt;br /&gt;
    frame.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 14. Font size animation ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.Font;&lt;br /&gt;
import java.awt.FontMetrics;&lt;br /&gt;
import java.awt.Graphics;&lt;br /&gt;
import java.awt.Graphics2D;&lt;br /&gt;
import java.awt.event.ActionEvent;&lt;br /&gt;
import java.awt.event.ActionListener;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JPanel;&lt;br /&gt;
import javax.swing.Timer;&lt;br /&gt;
public class FontSizeAnimation extends JPanel implements ActionListener {&lt;br /&gt;
  Timer timer;&lt;br /&gt;
  int x = 1;&lt;br /&gt;
  float alpha = 1;&lt;br /&gt;
  public FontSizeAnimation() {&lt;br /&gt;
    timer = new Timer(8, this);&lt;br /&gt;
    timer.setInitialDelay(190);&lt;br /&gt;
    timer.start();&lt;br /&gt;
  }&lt;br /&gt;
  public void paint(Graphics g) {&lt;br /&gt;
    super.paintComponent(g);&lt;br /&gt;
    Graphics2D g2d = (Graphics2D) g;&lt;br /&gt;
    Font font = new Font(&amp;quot;Dialog&amp;quot;, Font.PLAIN, x);&lt;br /&gt;
    g2d.setFont(font);&lt;br /&gt;
    FontMetrics fm = g2d.getFontMetrics();&lt;br /&gt;
    String s = &amp;quot;Java&amp;quot;;&lt;br /&gt;
    &lt;br /&gt;
    int w = (int) getSize().getWidth();&lt;br /&gt;
    int h = (int) getSize().getHeight();&lt;br /&gt;
    int stringWidth = fm.stringWidth(s);&lt;br /&gt;
    g2d.drawString(s, (w - stringWidth) / 2, h / 2);&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    JFrame frame = new JFrame(&amp;quot;FontSizeAnimation&amp;quot;);&lt;br /&gt;
    frame.add(new FontSizeAnimation());&lt;br /&gt;
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    frame.setSize(400, 300);&lt;br /&gt;
    frame.setLocationRelativeTo(null);&lt;br /&gt;
    frame.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
  public void actionPerformed(ActionEvent e) {&lt;br /&gt;
    x += 1;&lt;br /&gt;
    alpha -= 0.0001;&lt;br /&gt;
    repaint();&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 14. Swing Timer action ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.Color; &lt;br /&gt;
import java.awt.event.ActionEvent;&lt;br /&gt;
import java.awt.event.ActionListener;&lt;br /&gt;
import javax.swing.JButton;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.Timer;&lt;br /&gt;
public class TimerChangeButtonBackground extends JFrame {&lt;br /&gt;
  boolean flag = false;&lt;br /&gt;
  JButton button = new JButton(&amp;quot;Click to stop&amp;quot;);&lt;br /&gt;
  Timer timer;&lt;br /&gt;
  public TimerChangeButtonBackground() {&lt;br /&gt;
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    getContentPane().add(button, &amp;quot;Center&amp;quot;);&lt;br /&gt;
    button.addActionListener(new ActionListener() {&lt;br /&gt;
      public void actionPerformed(ActionEvent e) {&lt;br /&gt;
        timer.stop();&lt;br /&gt;
        button.setBackground(Color.red);&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
    timer = new Timer(1000, new ActionListener() {&lt;br /&gt;
      public void actionPerformed(ActionEvent e) {&lt;br /&gt;
        button.setBackground(flag ? Color.green : Color.yellow);&lt;br /&gt;
        flag = !flag;&lt;br /&gt;
        repaint();&lt;br /&gt;
      }&lt;br /&gt;
    });&lt;br /&gt;
    timer.start();&lt;br /&gt;
    pack();&lt;br /&gt;
    setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String arg[]) {&lt;br /&gt;
    new TimerChangeButtonBackground();&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 14. Swing Timers ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;OL&amp;gt;&amp;lt;LI&amp;gt;javax.swing.Timer can only be used in Swing applications.&amp;lt;/LI&amp;gt;&amp;lt;LI&amp;gt;javax.swing.Timer is a more appropriate choice over java.util.Timer for Swing applications.&amp;lt;/LI&amp;gt;&amp;lt;LI&amp;gt;javax.swing.Timer handles thread sharing.&amp;lt;/LI&amp;gt;&amp;lt;LI&amp;gt;You implement the java.awt.event.ActionListener interface and write your task code in its actionPerformed method.&amp;lt;/LI&amp;gt;&amp;lt;LI&amp;gt;Ro cancel a task, you use the javax.swing.Timer class&amp;quot;s stop method.&amp;lt;/LI&amp;gt;&amp;lt;/OL&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.event.ActionEvent;&lt;br /&gt;
import java.awt.event.ActionListener;&lt;br /&gt;
import javax.swing.Timer;&lt;br /&gt;
public class MainClass {&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    Timer timer = new Timer(1000, new MyTimerActionListener());&lt;br /&gt;
    timer.start();&lt;br /&gt;
    try {&lt;br /&gt;
      Thread.sleep(10000);&lt;br /&gt;
    } catch (InterruptedException e) {&lt;br /&gt;
    }&lt;br /&gt;
    timer.stop();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
class MyTimerActionListener implements ActionListener {&lt;br /&gt;
  public void actionPerformed(ActionEvent e) {&lt;br /&gt;
    System.out.println(&amp;quot;asdf&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 14. Timer based animation ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.Color;&lt;br /&gt;
import java.awt.Dimension;&lt;br /&gt;
import java.awt.Graphics;&lt;br /&gt;
import java.awt.Graphics2D;&lt;br /&gt;
import java.awt.RenderingHints;&lt;br /&gt;
import java.awt.event.ActionEvent;&lt;br /&gt;
import java.awt.event.ActionListener;&lt;br /&gt;
import java.awt.geom.Ellipse2D;&lt;br /&gt;
import javax.swing.JFrame;&lt;br /&gt;
import javax.swing.JPanel;&lt;br /&gt;
import javax.swing.Timer;&lt;br /&gt;
public class TimerBasedAnimation extends JPanel implements ActionListener {&lt;br /&gt;
  private Ellipse2D.Float ellipse = new Ellipse2D.Float();&lt;br /&gt;
  private double esize;&lt;br /&gt;
  private double maxSize = 0;&lt;br /&gt;
  private boolean initialize = true;&lt;br /&gt;
  Timer timer;&lt;br /&gt;
  ActionListener updateProBar;&lt;br /&gt;
  public TimerBasedAnimation() {&lt;br /&gt;
    setXY(20 * Math.random(), 200, 200);&lt;br /&gt;
    timer = new Timer(20, this);&lt;br /&gt;
    timer.setInitialDelay(190);&lt;br /&gt;
    timer.start();&lt;br /&gt;
  }&lt;br /&gt;
  public void setXY(double size, int w, int h) {&lt;br /&gt;
    esize = size;&lt;br /&gt;
    ellipse.setFrame(10, 10, size, size);&lt;br /&gt;
  }&lt;br /&gt;
  public void reset(int w, int h) {&lt;br /&gt;
    maxSize = w / 10;&lt;br /&gt;
    setXY(maxSize * Math.random(), w, h);&lt;br /&gt;
  }&lt;br /&gt;
  public void step(int w, int h) {&lt;br /&gt;
    esize++;&lt;br /&gt;
    if (esize &amp;gt; maxSize) {&lt;br /&gt;
      setXY(1, w, h);&lt;br /&gt;
    } else {&lt;br /&gt;
      ellipse.setFrame(ellipse.getX(), ellipse.getY(), esize, esize);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  public void render(int w, int h, Graphics2D g2) {&lt;br /&gt;
    g2.setColor(Color.BLUE);&lt;br /&gt;
    g2.draw(ellipse);&lt;br /&gt;
  }&lt;br /&gt;
  public void paint(Graphics g) {&lt;br /&gt;
    super.paintComponent(g);&lt;br /&gt;
    Graphics2D g2 = (Graphics2D) g;&lt;br /&gt;
    RenderingHints rh = new RenderingHints(RenderingHints.KEY_ANTIALIASING,&lt;br /&gt;
        RenderingHints.VALUE_ANTIALIAS_ON);&lt;br /&gt;
    rh.put(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);&lt;br /&gt;
    g2.setRenderingHints(rh);&lt;br /&gt;
    Dimension size = getSize();&lt;br /&gt;
    if (initialize) {&lt;br /&gt;
      reset(size.width, size.height);&lt;br /&gt;
      initialize = false;&lt;br /&gt;
    }&lt;br /&gt;
    this.step(size.width, size.height);&lt;br /&gt;
    render(size.width, size.height, g2);&lt;br /&gt;
  }&lt;br /&gt;
  public void actionPerformed(ActionEvent e) {&lt;br /&gt;
    repaint();&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) {&lt;br /&gt;
    JFrame frame = new JFrame(&amp;quot;TimerBasedAnimation&amp;quot;);&lt;br /&gt;
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
    frame.add(new TimerBasedAnimation());&lt;br /&gt;
    frame.setSize(350, 250);&lt;br /&gt;
    frame.setLocationRelativeTo(null);&lt;br /&gt;
    frame.setVisible(true);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 14. Timer Class ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.EventQueue;&lt;br /&gt;
import java.awt.event.ActionEvent;&lt;br /&gt;
import java.awt.event.ActionListener;&lt;br /&gt;
import javax.swing.Timer;&lt;br /&gt;
public class TimerSample {&lt;br /&gt;
  public static void main(String args[]) {&lt;br /&gt;
    Runnable runner = new Runnable() {&lt;br /&gt;
      public void run() {&lt;br /&gt;
        ActionListener actionListener = new ActionListener() {&lt;br /&gt;
          public void actionPerformed(ActionEvent actionEvent) {&lt;br /&gt;
            System.out.println(&amp;quot;Hello World Timer&amp;quot;);&lt;br /&gt;
          }&lt;br /&gt;
        };&lt;br /&gt;
        Timer timer = new Timer(500, actionListener);&lt;br /&gt;
        timer.start();&lt;br /&gt;
      }&lt;br /&gt;
    };&lt;br /&gt;
    EventQueue.invokeLater(runner);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 14. Timer Properties: coalesce ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The coalesce property allows for a busy system to throw notifications that haven&amp;quot;t happened yet &lt;br /&gt;
when a new event needs to be fired.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;This means if a timer runs every 500 milliseconds, but its system is bogged down and &lt;br /&gt;
doesn&amp;quot;t respond for a whole 2 seconds, the timer needs to send only one message, rather than also &lt;br /&gt;
sending the missing ones. If the setting were false, four messages would still need to be sent.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;By default, the coalesce value is true.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 14. To turn on log messages ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.awt.EventQueue;&lt;br /&gt;
import java.awt.event.ActionEvent;&lt;br /&gt;
import java.awt.event.ActionListener;&lt;br /&gt;
import javax.swing.Timer;&lt;br /&gt;
public class TimerSample {&lt;br /&gt;
  public static void main(String args[]) {&lt;br /&gt;
    Runnable runner = new Runnable() {&lt;br /&gt;
      public void run() {&lt;br /&gt;
        Timer.setLogTimers(true);&lt;br /&gt;
        ActionListener actionListener = new ActionListener() {&lt;br /&gt;
          public void actionPerformed(ActionEvent actionEvent) {&lt;br /&gt;
            System.out.println(&amp;quot;Hello World Timer&amp;quot;);&lt;br /&gt;
          }&lt;br /&gt;
        };&lt;br /&gt;
        Timer timer = new Timer(500, actionListener);&lt;br /&gt;
        timer.start();&lt;br /&gt;
      }&lt;br /&gt;
    };&lt;br /&gt;
    EventQueue.invokeLater(runner);&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>