2 * Jexer - Java Text User Interface
4 * The MIT License (MIT)
6 * Copyright (C) 2019 Kevin Lamonte
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:
15 * The above copyright notice and this permission notice shall be included in
16 * all copies or substantial portions of the Software.
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.
26 * @author Kevin Lamonte [kevin.lamonte@gmail.com]
32 import java
.awt
.event
.WindowEvent
;
33 import java
.awt
.event
.WindowListener
;
34 import java
.util
.ResourceBundle
;
35 import javax
.swing
.JFrame
;
36 import javax
.swing
.JPanel
;
37 import javax
.swing
.JSplitPane
;
39 import jexer
.backend
.SwingBackend
;
42 * This class is the main driver for a simple demonstration of Jexer's
43 * capabilities. It shows two Swing demo applications running in the same
46 public class Demo5
implements WindowListener
{
51 private static final ResourceBundle i18n
= ResourceBundle
.getBundle(Demo5
.class.getName());
53 // ------------------------------------------------------------------------
54 // Variables --------------------------------------------------------------
55 // ------------------------------------------------------------------------
58 * The first demo application instance.
60 DemoApplication app1
= null;
63 * The second demo application instance.
65 DemoApplication app2
= null;
67 // ------------------------------------------------------------------------
68 // WindowListener ---------------------------------------------------------
69 // ------------------------------------------------------------------------
72 * Pass window events into the event queue.
74 * @param event window event received
76 public void windowActivated(final WindowEvent event
) {
81 * Pass window events into the event queue.
83 * @param event window event received
85 public void windowClosed(final WindowEvent event
) {
90 * Pass window events into the event queue.
92 * @param event window event received
94 public void windowClosing(final WindowEvent event
) {
104 * Pass window events into the event queue.
106 * @param event window event received
108 public void windowDeactivated(final WindowEvent event
) {
113 * Pass window events into the event queue.
115 * @param event window event received
117 public void windowDeiconified(final WindowEvent event
) {
122 * Pass window events into the event queue.
124 * @param event window event received
126 public void windowIconified(final WindowEvent event
) {
131 * Pass window events into the event queue.
133 * @param event window event received
135 public void windowOpened(final WindowEvent event
) {
139 // ------------------------------------------------------------------------
140 // Demo5 ------------------------------------------------------------------
141 // ------------------------------------------------------------------------
144 * Run two demo applications in separate panes.
146 private void addApplications() {
149 * In this demo we will create two swing panels with two
150 * independently running applications, each with a different font
155 * First we create a panel to put it on. We need this to pass to
156 * SwingBackend's constructor, so that it knows not to create a new
159 JPanel app1Panel
= new JPanel();
162 * Next, we create the Swing backend. The "listener" (second
163 * argument, set to null) is what the backend wakes up on every event
164 * received. Typically this is the TApplication. TApplication sets
165 * it in its constructor, so we can pass null here and be fine.
167 SwingBackend app1Backend
= new SwingBackend(app1Panel
, null,
169 // Now that we have the backend, construct the TApplication.
170 app1
= new DemoApplication(app1Backend
);
173 * The second panel is the same sequence, except that we also change
174 * the font from the default Terminus to JVM monospaced.
176 JPanel app2Panel
= new JPanel();
177 SwingBackend app2Backend
= new SwingBackend(app2Panel
, null,
179 app2
= new DemoApplication(app2Backend
);
180 Font font
= new Font(Font
.MONOSPACED
, Font
.PLAIN
, 18);
181 app2Backend
.setFont(font
);
184 * Now that the applications are ready, spin them off on their
187 (new Thread(app1
)).start();
188 (new Thread(app2
)).start();
191 * The rest of this is standard Swing. Set up a frame, a split pane,
192 * put each of the panels on it, and make it visible.
194 JFrame frame
= new JFrame();
195 frame
.setDefaultCloseOperation(JFrame
.DISPOSE_ON_CLOSE
);
196 frame
.addWindowListener(this);
197 JSplitPane mainPane
= new JSplitPane(JSplitPane
.HORIZONTAL_SPLIT
,
198 app1Panel
, app2Panel
);
199 mainPane
.setOneTouchExpandable(true);
200 mainPane
.setDividerLocation(500);
201 mainPane
.setDividerSize(6);
202 mainPane
.setBorder(null);
203 frame
.setContentPane(mainPane
);
205 frame
.setTitle(i18n
.getString("frameTitle"));
206 frame
.setSize(1000, 640);
207 frame
.setVisible(true);
213 * @param args Command line arguments
215 public static void main(final String
[] args
) {
217 Demo5 demo
= new Demo5();
218 demo
.addApplications();
219 } catch (Exception e
) {