The "Dynamic Images" tutorial application demonstrates the capabilities of Echo's AwtImageReference
object. AwtImageReference
allows for the display of a java.awt.Image
within an Echo application. In this example, an image of an initially solid black rectangle is displayed within a Button
. Each time the button is clicked, a number of random hollow colored rectangles are drawn within the solid black rectangle.
If you have the Echo Tutorial Examples installed, you may run this example by visiting http://localhost:8080/EchoTutorial/dynamicimage. You must change the hostname and port number if your server is not running on localhost on port 8080.
import java.awt.Graphics2D; import java.awt.image.BufferedImage; import nextapp.echo.AwtImageReference; import nextapp.echo.Button; import nextapp.echo.ContentPane; import nextapp.echo.EchoInstance; import nextapp.echo.Window; import nextapp.echo.event.ActionEvent; import nextapp.echo.event.ActionListener; import nextapp.echoservlet.EchoServer; public class DynamicImageServlet extends EchoServer { public EchoInstance newInstance() { return new DynamicImageDemo(); } } class DynamicImageDemo extends EchoInstance implements ActionListener { private BufferedImage image; private Button button; // Every time the button is pressed, the // actionPerformed() method draws ten randomly // positioned and sized rectangles in random // colors on the button's image. public void actionPerformed(ActionEvent e) { Graphics2D g = (Graphics2D) image.getGraphics(); for (int index = 0; index < 10; ++index) { int x1 = (int) (500 * Math.random()); int y1 = (int) (250 * Math.random()); int x2 = (int) (500 * Math.random()); int y2 = (int) (250 * Math.random()); if (x2 < x1) { int swap = x1; x1 = x2; x2 = swap; } if (y2 < y1) { int swap = y1; y1 = y2; y2 = swap; } // Set the AWT Graphics drawing color to a // random value. g.setColor(new java.awt.Color( (int) (Math.random() * (1 < 24)))); // Draw a hollow rectangle on the image. g.drawRect(x1, y1, x2 - x1, y2 - y1); // This call will cause the button to be redrawn // on the client browser. This method must be // called in order for the browser to update // because no Echo components have been changed // in such a way that would warrant updating // information on the client (only the image has // been altered.) button.update(); } } public Window init() { Window window = new Window("Dynamic Image Demonstration"); ContentPane content = new ContentPane(); window.setContent(content); // Create a new 500 by 250 pixel // java.awt.BufferedImage. image = new BufferedImage(500, 250, BufferedImage.TYPE_3BYTE_BGR); // Create a new Button which contains the generated // image. AwtImageReference implements the // ImageReference interface. This makes it possible // to use AwtImageReferences anywhere you've used // HttpImageReferences before. button = new Button(new AwtImageReference(image)); button.addActionListener(this); content.add(button); return window; } }