TWindowBackend
[nikiroo-utils.git] / src / jexer / demos / Demo5.java
index 88d6a7cdf7247b07cf92a4c4c53481ade856806d..df8075a982005ccb1839eb959990025496747a66 100644 (file)
@@ -28,6 +28,7 @@
  */
 package jexer.demos;
 
+import java.awt.Font;
 import java.awt.event.WindowEvent;
 import java.awt.event.WindowListener;
 import javax.swing.JFrame;
@@ -126,27 +127,55 @@ public class Demo5 implements WindowListener {
      */
     private void addApplications() {
 
-        // Spin up the frame
-        JFrame frame = new JFrame();
-        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
-        frame.addWindowListener(this);
-
-        // Create two panels with two applications, each with a different
-        // font size.
+        /*
+         * In this demo we will create two swing panels with two
+         * independently running applications, each with a different font
+         * size.
+         */
+
+        /*
+         * First we create a panel to put it on.  We need this to pass to
+         * SwingBackend's constructor, so that it knows not to create a new
+         * frame.
+         */
         JPanel app1Panel = new JPanel();
-        SwingBackend app1Backend = new SwingBackend(app1Panel, new Object(),
+
+        /*
+         * Next, we create the Swing backend.  The "listener" (second
+         * argument, set to null) is what the backend wakes up on every event
+         * received.  Typically this is the TApplication.  TApplication sets
+         * it in its constructor, so we can pass null here and be fine.
+         */
+        SwingBackend app1Backend = new SwingBackend(app1Panel, null,
             80, 25, 16);
+        // Now that we have the backend, construct the TApplication.
         app1 = new DemoApplication(app1Backend);
-        app1Backend.setListener(app1);
 
+        /*
+         * The second panel is the same sequence, except that we also change
+         * the font from the default Terminus to JVM monospaced.
+         */
         JPanel app2Panel = new JPanel();
-        SwingBackend app2Backend = new SwingBackend(app2Panel, new Object(),
+        SwingBackend app2Backend = new SwingBackend(app2Panel, null,
             80, 25, 18);
         app2 = new DemoApplication(app2Backend);
-        app1Backend.setListener(app2);
+        Font font = new Font(Font.MONOSPACED, Font.PLAIN, 18);
+        app2Backend.setFont(font);
+
+        /*
+         * Now that the applications are ready, spin them off on their
+         * threads.
+         */
         (new Thread(app1)).start();
         (new Thread(app2)).start();
 
+        /*
+         * The rest of this is standard Swing.  Set up a frame, a split pane,
+         * put each of the panels on it, and make it visible.
+         */
+        JFrame frame = new JFrame();
+        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
+        frame.addWindowListener(this);
         JSplitPane mainPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,
             app1Panel, app2Panel);
         mainPane.setOneTouchExpandable(true);