This animation tests all the animation method calls available. It creates circles lines triangles rectangles and text of different colors. It moves these around the animation frame both smoothly and in jumps individually and concurrently.

xa.begin();
xa.delay(10);
xa.pointLine("Lthin"
0.3f
0.2f
0.8f
0.7f
Color.black
XtangoApplet.THIN);
xa.delay(10);
xa.pointLine("Lmedium"
0.4f
0.2f
0.9f
0.7f
Color.black
XtangoApplet.MEDTHICK);
xa.delay(10);
xa.pointLine("Lthick"
0.5f
0.2f
(float)1
0.7f
Color.black
XtangoApplet.THICK);
xa.delay(10);
xa.triangle("Tri1"
0.1f
0.1f
0.5f
0.9f
0.9f
0.2f
Color.magenta
XtangoApplet.OUTLINE);
xa.delay(10);
xa.triangle("Tri2"
0.1f
0.3f
0.7f
0.9f
0.8f
0.3f
Color.green
XtangoApplet.SOLID);
xa.delay(10);
xa.bg(Color.yellow);
xa.delay(10);
xa.text("t00"
0.0f
0.0f
false
Color.gray
text 0
);
xa.delay(10);
xa.text("t01"
0.1f
0.1f
false
Color.blue
text 1
);
xa.delay(10);
xa.circle("c0"
0.8f
0.2f
0.1f
Color.red
XtangoApplet.SOLID);
xa.delay(10);
xa.bg(Color.cyan);
xa.delay(10);
xa.text("t02"
0.2f
0.2f
false
Color.gray
text 2
);
xa.delay(10);
xa.text("t03"
0.3f
0.3f
false
Color.gray
text 3
);
xa.delay(10);
xa.text("t04"
0.4f
0.4f
false
Color.gray
text 4
);
xa.delay(10);
xa.text("t05"
0.5f
0.5f
false
Color.gray
text 5
);
xa.delay(10);
xa.text("t06"
0.6f
0.6f
false
Color.gray
text 6
);
xa.delay(10);
xa.text("t06"
0.6f
0.6f
false
Color.gray
TEXT 6
);
xa.delay(10);
xa.text("t07"
0.7f
0.7f
false
Color.gray
text 7
);
xa.delay(10);
xa.text("t08"
0.8f
0.8f
false
Color.gray
text 8
);
xa.delay(10);
xa.text("t09"
0.9f
0.9f
false
Color.gray
text 9
);
xa.delay(10);
xa.text("t10"
(float)1
(float)1
false
Color.gray
text10
);
xa.delay(10);
xa.circle("c1"
0.7f
0.7f
0.05f
Color.black
XtangoApplet.OUTLINE);
xa.delay(10);
xa.fill("c1"
XtangoApplet.SOLID);
xa.delay(10);
xa.fill("c1"
XtangoApplet.HALF);
xa.delay(10);
xa.color("t07"
Color.white);
xa.delay(10);
xa.raise("t07");
xa.delay(10);
xa.swapIds("t04"
t05
);
xa.jump("t04"
0.9f
0.1f);
xa.delay(10);
xa.delete("t04"); xa.delete("t05"); xa.delete("t06");
xa.delete("t04");
xa.delay(10);
xa.jumpTo("c0"
t03
);
xa.delay(10);
xa.vis("t03");    // should lower
xa.delay(10);
xa.vis("t03");    // should raise
xa.delay(10);
xa.rectangle("R"
0.5f
0.5f
0.1f
0.2f
Color.black
XtangoApplet.SOLID);
xa.delay(10);
xa.rectangle("Rhalf"
0.6f
0.6f
0.2f
0.1f
Color.black
XtangoApplet.HALF);
xa.delay(10);
xa.line("L"
0.1f
0.1f
0.8f
0.8f
Color.black
XtangoApplet.THIN);
xa.delay(10);
xa.circle("moveTest1"
0.1f
0.9f
0.05f
Color.magenta
XtangoApplet.SOLID);
xa.move("moveTest1"
0.9f
0.1f);
xa.circle("moveTest2"
0.9f
0.9f
0.05f
Color.blue
XtangoApplet.OUTLINE);
xa.move("moveTest2"
0.1f
0.1f);
for (int i = 0; i < 5; i++) {
   xa.rectangle("R"+i
(float)Math.random()
(float)Math.random()

      (float)Math.random()/4

      (float)Math.random()/4
Color.magenta
XtangoApplet.SOLID);
   xa.delay(2);
   xa.color("R"+i
Color.orange);
   xa.delay(2);
   xa.delete("R"+i);
}
for (int i = 0; i < 5; i++) {
   xa.delay(2);
   float x = (float)Math.random();
   float y = (float)Math.random();
   System.out.println("jump x=" + x + "
y=" + y);
   xa.jump("c1"
x
y);
}
xa.exchangePosAsync("moveTest1"
moveTest2
);
xa.delay(1);
xa.bigText("ha!"
0.5f
0.1f
true
Color.black
ha!
);
xa.exchangePos("moveTest1"
moveTest2
);
xa.delay(1);
xa.bigText("Ha!"
0.6f
0.1f
true
Color.black
Ha!
);
xa.exchangePosAsync("moveTest1"
moveTest2
);
xa.delay(5);
xa.bigText("HA!"
0.7f
0.1f
true
Color.black
HA!
);
xa.delay(10);
xa.jumpRelative("t00"
0.05f
0.05f);
xa.delay(10);
xa.jumpRelative("t01"
-0.05f
0.07f);
xa.delay(10);
xa.jumpRelative("t02"
0.02f
-0.15f);
xa.delay(10);
xa.jumpRelative("t03"
-0.3f
-0.3f);
xa.delay(10);
xa.moveRelative("moveTest1"
0.3f
0.3f);
xa.moveTo("moveTest2"
t00
);
xa.delay(10);
xa.smallText("Tsmall"
0.2f
0.9f
true
Color.magenta
Going...
);
xa.line("L1"
0.2f
0.85f
0.0f
0.1f
Color.black
XtangoApplet.THIN);
xa.line("L2"
0.15f
0.9f
0.1f
0.0f
Color.black
XtangoApplet.THIN);
xa.delay(10);
xa.text("Tnormal"
0.15f
0.8f
true
Color.blue
Yup, Going...
);
xa.line("L3"
0.15f
0.75f
0.0f
0.1f
Color.black
XtangoApplet.THIN);
xa.line("L4"
0.1f
0.8f
0.1f
0.0f
Color.black
XtangoApplet.THIN);
xa.delay(10);
xa.bigText("Tbig"
0.1f
0.7f
true
Color.darkGray
Surely, GONE!
);
xa.line("L5"
0.1f
0.65f
0.0f
0.1f
Color.black
XtangoApplet.THIN);
xa.line("L6"
0.05f
0.7f
0.1f
0.0f
Color.black
XtangoApplet.THIN);
xa.delay(10);
xa.coords(0.0f
0.0f
0.5f
0.5f);
xa.delay(10);
xa.coords(0.0f
0.5f
0.5f
(float)1);
xa.delay(10);
xa.coords(0.0f
0.0f
(float)1
(float)1);
xa.delay(10);
xa.coords(0.0f
0.0f
(float)1
0.5f);
xa.delay(10);
xa.coords(0.0f
0.0f
0.5f
(float)1);
xa.delay(10);
xa.switchPos("Tbig"
Tsmall
);
xa.delay(10);
xa.moveToAsync("Tnormal"
Tsmall
);
xa.delay(1);
xa.moveRelativeAsync("Tbig"
0.3f
0.0f);
xa.moveAsync("Tsmall"
0.2f
0.9f);
System.out.println("DONE!");
xa.end();
At the bottom of the animation window is a button and text field. First click this button. To start the animation then push the ``Start'' button. An applet appears here if you have a Java-enabled browser.

© 1998 Stephen J. Hartley

Permission is granted to copy and distribute this material for educational purposes only, provided that the following credit line is included: "Concurrent Programming using Java, Copyright 1997 Stephen J. Hartley." Permission is granted to alter and distribute this material provided that the following credit line is included: "Adapted from Concurrent Programming using Java, Copyright 1997 Stephen J. Hartley.