Not dead note
[fanfix.git] / src / jexer / demos / Demo5.java
CommitLineData
42873e30
KL
1/*
2 * Jexer - Java Text User Interface
3 *
4 * The MIT License (MIT)
5 *
6 * Copyright (C) 2017 Kevin Lamonte
7 *
8 * Permission is hereby granted, free of charge, to any person obtaining a
9 * copy of this software and associated documentation files (the "Software"),
10 * to deal in the Software without restriction, including without limitation
11 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
12 * and/or sell copies of the Software, and to permit persons to whom the
13 * Software is furnished to do so, subject to the following conditions:
14 *
15 * The above copyright notice and this permission notice shall be included in
16 * all copies or substantial portions of the Software.
17 *
18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
21 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
23 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
24 * DEALINGS IN THE SOFTWARE.
25 *
26 * @author Kevin Lamonte [kevin.lamonte@gmail.com]
27 * @version 1
28 */
29package jexer.demos;
30
88a99379 31import java.awt.Font;
42873e30
KL
32import java.awt.event.WindowEvent;
33import java.awt.event.WindowListener;
34import javax.swing.JFrame;
35import javax.swing.JPanel;
36import javax.swing.JSplitPane;
37
38import jexer.backend.SwingBackend;
39
40/**
41 * This class is the main driver for a simple demonstration of Jexer's
42 * capabilities. It shows two Swing demo applications running in the same
43 * Swing UI.
44 */
45public class Demo5 implements WindowListener {
46
43ad7b6c
KL
47 // ------------------------------------------------------------------------
48 // Variables --------------------------------------------------------------
49 // ------------------------------------------------------------------------
50
42873e30
KL
51 /**
52 * The first demo application instance.
53 */
54 DemoApplication app1 = null;
55
56 /**
57 * The second demo application instance.
58 */
59 DemoApplication app2 = null;
60
43ad7b6c
KL
61 // ------------------------------------------------------------------------
62 // WindowListener ---------------------------------------------------------
63 // ------------------------------------------------------------------------
64
42873e30
KL
65 /**
66 * Pass window events into the event queue.
67 *
68 * @param event window event received
69 */
70 public void windowActivated(final WindowEvent event) {
71 // Ignore
72 }
73
74 /**
75 * Pass window events into the event queue.
76 *
77 * @param event window event received
78 */
79 public void windowClosed(final WindowEvent event) {
80 // Ignore
81 }
82
83 /**
84 * Pass window events into the event queue.
85 *
86 * @param event window event received
87 */
88 public void windowClosing(final WindowEvent event) {
89 if (app1 != null) {
90 app1.exit();
91 }
92 if (app2 != null) {
93 app2.exit();
94 }
95 }
96
97 /**
98 * Pass window events into the event queue.
99 *
100 * @param event window event received
101 */
102 public void windowDeactivated(final WindowEvent event) {
103 // Ignore
104 }
105
106 /**
107 * Pass window events into the event queue.
108 *
109 * @param event window event received
110 */
111 public void windowDeiconified(final WindowEvent event) {
112 // Ignore
113 }
114
115 /**
116 * Pass window events into the event queue.
117 *
118 * @param event window event received
119 */
120 public void windowIconified(final WindowEvent event) {
121 // Ignore
122 }
123
124 /**
125 * Pass window events into the event queue.
126 *
127 * @param event window event received
128 */
129 public void windowOpened(final WindowEvent event) {
130 // Ignore
131 }
132
43ad7b6c
KL
133 // ------------------------------------------------------------------------
134 // Demo5 ------------------------------------------------------------------
135 // ------------------------------------------------------------------------
136
42873e30
KL
137 /**
138 * Run two demo applications in separate panes.
139 */
140 private void addApplications() {
141
3e074355
KL
142 /*
143 * In this demo we will create two swing panels with two
144 * independently running applications, each with a different font
145 * size.
146 */
147
148 /*
149 * First we create a panel to put it on. We need this to pass to
150 * SwingBackend's constructor, so that it knows not to create a new
151 * frame.
152 */
42873e30 153 JPanel app1Panel = new JPanel();
3e074355
KL
154
155 /*
156 * Next, we create the Swing backend. The "listener" (second
157 * argument, set to null) is what the backend wakes up on every event
158 * received. Typically this is the TApplication. TApplication sets
159 * it in its constructor, so we can pass null here and be fine.
160 */
161 SwingBackend app1Backend = new SwingBackend(app1Panel, null,
42873e30 162 80, 25, 16);
3e074355 163 // Now that we have the backend, construct the TApplication.
42873e30 164 app1 = new DemoApplication(app1Backend);
42873e30 165
3e074355
KL
166 /*
167 * The second panel is the same sequence, except that we also change
168 * the font from the default Terminus to JVM monospaced.
169 */
42873e30 170 JPanel app2Panel = new JPanel();
3e074355 171 SwingBackend app2Backend = new SwingBackend(app2Panel, null,
42873e30
KL
172 80, 25, 18);
173 app2 = new DemoApplication(app2Backend);
88a99379
KL
174 Font font = new Font(Font.MONOSPACED, Font.PLAIN, 18);
175 app2Backend.setFont(font);
3e074355
KL
176
177 /*
178 * Now that the applications are ready, spin them off on their
179 * threads.
180 */
42873e30
KL
181 (new Thread(app1)).start();
182 (new Thread(app2)).start();
183
3e074355
KL
184 /*
185 * The rest of this is standard Swing. Set up a frame, a split pane,
186 * put each of the panels on it, and make it visible.
187 */
188 JFrame frame = new JFrame();
189 frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
190 frame.addWindowListener(this);
42873e30
KL
191 JSplitPane mainPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,
192 app1Panel, app2Panel);
193 mainPane.setOneTouchExpandable(true);
194 mainPane.setDividerLocation(500);
195 mainPane.setDividerSize(6);
196 mainPane.setBorder(null);
197 frame.setContentPane(mainPane);
198
199 frame.setTitle("Two Jexer Apps In One Swing UI");
200 frame.setSize(1000, 640);
201 frame.setVisible(true);
202 }
203
204 /**
205 * Main entry point.
206 *
207 * @param args Command line arguments
208 */
209 public static void main(final String [] args) {
210 try {
211 Demo5 demo = new Demo5();
212 demo.addApplications();
213 } catch (Exception e) {
214 e.printStackTrace();
215 }
216 }
217
218}