Creare interfacce testuali in Java con Lanterna

Mattepuffo's logo
Creare interfacce testuali in Java con Lanterna

Creare interfacce testuali in Java con Lanterna

Lanterna è una libreria per Java che ci permette di creare delle interfacce testuali simili a quelle create con curses.

Ma questa a descrizione è molto restrittiva, in quanto Lanterna è in grado ci creare anche dei layout complessi, con finestre, pannelli, file dialog, ecc.

Inoltre, è anche possibile usare le stesse classi di Swing (ma non è obbligatorio).

Vi propongo uno dei molteplici esempi che ci sono sul canale di GitHub:

import com.googlecode.lanterna.TerminalSize;
import com.googlecode.lanterna.TextColor;
import com.googlecode.lanterna.gui2.*;
import com.googlecode.lanterna.screen.Screen;
import com.googlecode.lanterna.screen.TerminalScreen;
import com.googlecode.lanterna.terminal.DefaultTerminalFactory;
import com.googlecode.lanterna.terminal.Terminal;
import java.io.IOException;
import java.util.Arrays;
import java.util.regex.Pattern;

public class Main {

    public static void main(String[] args) {
        try {
            Terminal terminal = new DefaultTerminalFactory().createTerminal();
            Screen screen = new TerminalScreen(terminal);
            screen.startScreen();
            Panel panel = new Panel();
            panel.setLayoutManager(new GridLayout(2));
            Label lblOutput = new Label("");
            panel.addComponent(new Label("Num 1"));
            TextBox txtNum1 = new TextBox().setValidationPattern(
                    Pattern.compile("[0-9]*"))
                    .addTo(panel);
            panel.addComponent(new Label("Num 2"));
            TextBox txtNum2 = new TextBox().setValidationPattern(
                    Pattern.compile("[0-9]*"))
                    .addTo(panel);
            panel.addComponent(new EmptySpace(new TerminalSize(0, 0)));
            new Button("Fai la somma:", () -> {
                int num1 = Integer.parseInt(txtNum1.getText());
                int num2 = Integer.parseInt(txtNum2.getText());
                lblOutput.setText(Integer.toString(num1 + num2));
            }).addTo(panel);
            panel.addComponent(new EmptySpace(new TerminalSize(0, 0)));
            panel.addComponent(lblOutput);
            BasicWindow window = new BasicWindow();
            window.setHints(Arrays.asList(Window.Hint.CENTERED));
            window.setComponent(panel);
            MultiWindowTextGUI gui = new MultiWindowTextGUI(screen,
                    new DefaultWindowManager(),
                    new EmptySpace(TextColor.ANSI.BLUE));
            gui.addWindowAndWait(window);
        } catch (IOException ex) {
            System.out.println(ex.getMessage());
        }
    }

}

Come potete vedere, qua si parla di componenti "grafici" veri e propri.

In questo esempio abbiamo inserito due campi di testo, nei quali è possibile scrivere solo numeri (le lettere non vengono accettate).

Al click sul bottone, viene visualizzata la somma dei due numeri.

Se usate Maven, basta aggiungere questa dipendenza:

        <dependency>
            <groupId>com.googlecode.lanterna</groupId>
            <artifactId>lanterna</artifactId>
            <version>3.0.1</version>
        </dependency>

Enjoy!


Condividi

Commentami!