*
* The MIT License (MIT)
*
- * Copyright (C) 2016 Kevin Lamonte
+ * Copyright (C) 2017 Kevin Lamonte
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
package jexer.backend;
import java.util.List;
+import javax.swing.JComponent;
import jexer.event.TInputEvent;
-import jexer.io.SwingScreen;
-import jexer.io.SwingTerminal;
/**
* This class uses standard Swing calls to handle screen, keyboard, and mouse
* I/O.
*/
-public final class SwingBackend extends Backend {
+public final class SwingBackend extends GenericBackend {
/**
* Input events are processed by this Terminal.
private SwingTerminal terminal;
/**
- * Public constructor.
+ * Public constructor. The window will be 80x25 with font size 20 pts.
*
* @param listener the object this backend needs to wake up when new
* input comes in
*/
public SwingBackend(final Object listener) {
- // Create a screen
- SwingScreen screen = new SwingScreen();
- this.screen = screen;
+ this(listener, 80, 25, 20);
+ }
+
+ /**
+ * Public constructor will spawn a new JFrame.
+ *
+ * @param listener the object this backend needs to wake up when new
+ * input comes in
+ * @param windowWidth the number of text columns to start with
+ * @param windowHeight the number of text rows to start with
+ * @param fontSize the size in points. Good values to pick are: 16, 20,
+ * 22, and 24.
+ */
+ public SwingBackend(final Object listener, final int windowWidth,
+ final int windowHeight, final int fontSize) {
- // Create the Swing event listeners
- terminal = new SwingTerminal(listener, screen);
+ // Create a Swing backend using a JFrame
+ terminal = new SwingTerminal(windowWidth, windowHeight, fontSize,
+ listener);
// Hang onto the session info
this.sessionInfo = terminal.getSessionInfo();
+
+ // SwingTerminal is the screen too
+ screen = terminal;
+ }
+
+ /**
+ * Public constructor will render onto a JComponent.
+ *
+ * @param component the Swing component to render to
+ * @param listener the object this backend needs to wake up when new
+ * input comes in
+ * @param windowWidth the number of text columns to start with
+ * @param windowHeight the number of text rows to start with
+ * @param fontSize the size in points. Good values to pick are: 16, 20,
+ * 22, and 24.
+ */
+ public SwingBackend(final JComponent component, final Object listener,
+ final int windowWidth, final int windowHeight, final int fontSize) {
+
+ // Create a Swing backend using a JComponent
+ terminal = new SwingTerminal(component, windowWidth, windowHeight,
+ fontSize, listener);
+
+ // Hang onto the session info
+ this.sessionInfo = terminal.getSessionInfo();
+
+ // SwingTerminal is the screen too
+ screen = terminal;
}
/**
*/
@Override
public void shutdown() {
- ((SwingScreen) screen).shutdown();
+ terminal.closeTerminal();
+ }
+
+ /**
+ * Set the window title.
+ *
+ * @param title the new title
+ */
+ @Override
+ public void setTitle(final String title) {
+ screen.setTitle(title);
+ }
+
+ /**
+ * Set listener to a different Object.
+ *
+ * @param listener the new listening object that run() wakes up on new
+ * input
+ */
+ public void setListener(final Object listener) {
+ terminal.setListener(listener);
}
}