Creare TUI in Kotlin 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).
Oggi vediamo come usarla in Kotlin.
Se usate Maven:
<dependency>
<groupId>com.googlecode.lanterna</groupId>
<artifactId>lanterna</artifactId>
<version>3.1.1</version>
</dependency>
Qui sotto il codice di un vecchio esempio che avevamo visto in Java riportato in Kotlin:
import com.googlecode.lanterna.TerminalSize
import com.googlecode.lanterna.TextColor
import com.googlecode.lanterna.gui2.*
import com.googlecode.lanterna.gui2.Window.Hint
import com.googlecode.lanterna.screen.Screen
import com.googlecode.lanterna.screen.TerminalScreen
import com.googlecode.lanterna.terminal.DefaultTerminalFactory
import java.io.IOException
import java.util.*
import java.util.regex.Pattern
fun main(args: Array<String>) {
try {
val terminal = DefaultTerminalFactory().createTerminal()
val screen: Screen = TerminalScreen(terminal)
screen.startScreen()
val panel = Panel()
panel.layoutManager = GridLayout(2)
val lblOutput = Label("")
panel.addComponent(Label("Num 1"))
val txtNum1 = TextBox().setValidationPattern(
Pattern.compile("[0-9]*")
).addTo(panel)
panel.addComponent(Label("Num 2"))
val txtNum2 = TextBox().setValidationPattern(
Pattern.compile("[0-9]*")
).addTo(panel)
panel.addComponent(EmptySpace(TerminalSize(0, 0)))
Button("Fai la somma:") {
val num1 = txtNum1.text.toInt()
val num2 = txtNum2.text.toInt()
lblOutput.text = Integer.toString(num1 + num2)
}.addTo(panel)
panel.addComponent(EmptySpace(TerminalSize(0, 0)))
panel.addComponent(lblOutput)
val window = BasicWindow()
window.setHints(Arrays.asList(Hint.CENTERED))
window.component = panel
val gui = MultiWindowTextGUI(
screen,
DefaultWindowManager(),
EmptySpace(TextColor.ANSI.BLUE)
)
gui.addWindowAndWait(window)
} catch (ex: IOException) {
println(ex.message)
}
}
Enjoy!
kotlin maven lanterna tui
Commentami!