Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance. Project price only 1 $
You can buy this project and download/modify it how often you want.
/*
* Jexer - Java Text User Interface
*
* The MIT License (MIT)
*
* Copyright (C) 2019 Kevin Lamonte
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
* @author Kevin Lamonte [[email protected]]
* @version 1
*/
package jexer.demos;
import java.util.ResourceBundle;
import jexer.TApplication;
import jexer.backend.*;
import jexer.demos.DemoApplication;
/**
* This class shows off the use of MultiBackend and MultiScreen.
*/
public class Demo6 {
/**
* Translated strings.
*/
private static final ResourceBundle i18n = ResourceBundle.getBundle(Demo6.class.getName());
// ------------------------------------------------------------------------
// Demo6 ------------------------------------------------------------------
// ------------------------------------------------------------------------
/**
* Main entry point.
*
* @param args Command line arguments
*/
public static void main(final String [] args) {
try {
/*
* In this demo we will create two applications spanning three
* screens. One of the applications will have both an ECMA48
* screen and a Swing screen, with all I/O mirrored between them.
* The second application will have a Swing screen containing a
* window showing the first application, also mirroring I/O
* between the window and the other two screens.
*/
/*
* We create the first screen and use it to establish a
* MultiBackend.
*/
ECMA48Backend ecmaBackend = new ECMA48Backend();
MultiBackend multiBackend = new MultiBackend(ecmaBackend);
/*
* Now we create the first application (a standard demo).
*/
DemoApplication demoApp = new DemoApplication(multiBackend);
/*
* We will need the width and height of the ECMA48 screen, so get
* the Screen reference now.
*/
Screen multiScreen = multiBackend.getScreen();
/*
* Now we create the second screen (backend) for the first
* application. It will be the same size as the ECMA48 screen,
* with a font size of 16 points.
*/
SwingBackend swingBackend = new SwingBackend(multiScreen.getWidth(),
multiScreen.getHeight(), 16);
/*
* Add this screen to the MultiBackend, and at this point we have
* one demo application spanning two physical screens.
*/
multiBackend.addBackend(swingBackend);
multiBackend.setListener(demoApp);
/*
* Time for the second application. This one will have a single
* window mirroring the contents of the first application. Let's
* make it a little larger than the first application's
* width/height.
*/
int width = multiScreen.getWidth();
int height = multiScreen.getHeight();
/*
* Make a new Swing window for the second application.
*/
SwingBackend monitorBackend = new SwingBackend(width + 5,
height + 5, 16);
/*
* Setup the second application, give it the basic file and
* window menus.
*/
TApplication monitor = new TApplication(monitorBackend);
monitor.addFileMenu();
monitor.addWindowMenu();
/*
* Now add the third screen to the first application. We want to
* change the object it locks on in its draw() method to the
* MultiScreen, that will dramatically reduce (not totally
* eliminate) screen tearing/artifacts.
*/
TWindowBackend windowBackend = new TWindowBackend(demoApp,
monitor, i18n.getString("monitorWindow"),
width + 2, height + 2);
windowBackend.setDrawLock(multiScreen);
windowBackend.setOtherApplication(demoApp);
multiBackend.addBackend(windowBackend);
/*
* Three screens, two applications: spin them up!
*/
(new Thread(demoApp)).start();
(new Thread(monitor)).start();
} catch (Exception e) {
e.printStackTrace();
}
}
}