java ncurses tui

¿Cuál es la mejor manera de obtener la funcionalidad de las interfaces de usuario de texto(tipo ncurses) en Java?



tui (8)

Necesito implementar una aplicación de consola (posiblemente en Java) con funcionalidad similar a ncurses (como navegar por un menú y volver a dibujar toda la pantalla).

Las únicas soluciones que puedo encontrar para hacer esto hasta ahora son CHARVA ( "Un kit de herramientas de Windowing de Java para terminales de texto" ), tuipeer ( "Una interfaz de usuario de texto para el AWT de Java" ) y un artículo muy antiguo del Dr. Dobb ( "A Texto UI para el Java AWT " ).

Hasta ahora, CHARVA es lo mejor que puedo encontrar, pero no me gusta la idea de usar JNI para envolver maldiciones.

¿Hay alguna forma estándar, digamos con AWT / Swing, para hacer esto? ¿Qué otras alternativas hay?



Creo que sería mejor abstraer su código Java de la TUI y usar ncurses contra varias partes separadas de su aplicación o usar argumentos, en un estilo de servicios web. Por ejemplo, codifique su TUI y cuando el usuario realice una acción, use ncurses para llamar a su código pasando algunos parámetros

java -Daction=doSomething MyApp

De esta manera puede codificar su aplicación usando una GUI también en caso de que lo necesite.


Desde 2010 hay Lanterna:

Lanterna es una biblioteca de Java que le permite escribir interfaces de usuario semi-gráficas sencillas en un entorno de solo texto, muy similar a las maldiciones de la biblioteca C pero con más funciones. Lanterna admite terminales compatibles con xterm y emuladores de terminal como konsole, gnome-terminal, putty, xterm y muchos más. Uno de los principales beneficios de lanterna es que no depende de ninguna biblioteca nativa, sino que se ejecuta al 100% en Java puro.

Más aquí: https://github.com/mabe02/lanterna



Estoy usando JavaTUI ( http://sourceforge.net/projects/javatui/files/ ) en mis varios proyectos de consola de Java. Es lo mejor que puedo encontrar pero está muy lejos de ser perfecto. Creo que no hay una buena implementación de TUI en el mundo java.


La respuesta corta es tratar con un envoltorio de Java alrededor de las maldiciones.

La respuesta larga:

Los terminales varían mucho, por lo que existen las bibliotecas terminfo / termcap y por qué son un desastre para tratar (los mantenedores de esos proyectos son santos por cierto). Se abstraen todas las variaciones terminales realmente básicas de algo sano. Las maldiciones hacen que esas bibliotecas sean agradables y eficientes de usar.

Si desea una solución Java pura, necesitará ambas bibliotecas o su equivalente en Java. Estoy seguro de que alguien lo señalará si existe, pero por lo que sé, no existe.


Prueba http://sourceforge.net/projects/javacurses/ (lo siento usa JNI). También intenté implementar una versión corta de esta biblioteca solo para aprender JNI, consulte http://plindenbaum.blogspot.com/2008/01/java-native-interface-jni-notebook.html . También se podría imaginar un JPanel especializado que muestre una matriz de caracteres:

public class TPanel extends JPanel { private Vector<Vector<YourCharAndStyle>> rows; protected void paintComponent(Graphics g) { //paint the characters (...) } }