2009-08-24 19 views
21

Necesito implementar una aplicación de consola (posiblemente en Java) con funcionalidad similar a ncurses (como navegar un menú y volver a dibujar toda la pantalla).¿Cuál es la mejor manera de obtener la funcionalidad de interfaces de usuario de texto (ncurses-like) en Java?

Las únicas soluciones que puedo encontrar para hacer esto hasta ahora son Charva ("A Java Windowing Toolkit for Text Terminals"), tuipeer ("A Text User Interface for the Java AWT") y un artículo muy viejo del Dr. Dobb ("A Text UI for the 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 manera estándar, por ejemplo con AWT/Swing, para hacer esto? ¿Qué otras alternativas hay?

+0

Miré en esto hace un par de años y no encontraron más de lo que tiene. Sospecho que el problema es que la funcionalidad del terminal de bajo nivel es altamente específico de la plataforma - y no sólo a nivel de sistema operativo, pero a nivel de emulador de terminal (VT100, xterm, etc.). No estoy seguro de cómo me gustaría incluso ir sobre cómo tratar con que, sin envolver una API nativa como maldiciones (o termcap/terminfo, por lo menos) que ya se abstrae. Supongo que podría hablar con los caracteres de control sin procesar a 'System.out'. Hablando –

+0

caracteres de control primas a la salida estándar es exactamente como lo hace maldiciones, por lo que es una idea sensata, aunque un trabajo sustancial. – skaffman

+2

¿Qué pasa con JNI? Yo iría con CHARVA, parece completo (ish). –

Respuesta

0

creo JCurses es una aplicación Java nativa de la API de maldiciones, recuerdo que tiene algunas peculiaridades, pero debería ser capaz de hacer lo que quiere:

http://sourceforge.net/projects/javacurses/

+0

parece que utiliza JNI también – skaffman

+0

no se actualiza en siete años, aunque ... también parece que utilizar un poco de código nativo, probablemente usando JNI. –

0

Trate java curses (lo siento, usa JNI). También traté de implementar una versión corta de esta biblioteca solo para aprender JNI, ver http://plindenbaum.blogspot.com/2008/01/java-native-interface-jni-notebook.html. También se podría imaginar un JPanel especializados que muestran una matriz de caracteres:

public class TPanel extends JPanel 
{ 
private Vector<Vector<YourCharAndStyle>> rows; 

protected void paintComponent(Graphics g) 
{ 
//paint the characters 
(...) 
} 

} 
1

La respuesta corta es tratar con una envoltura alrededor de Java maldiciones.

La respuesta larga:

terminales varían mucho, por lo que existen bibliotecas terminfo/termcap y por qué son un desastre para hacer frente a (Los mantenedores de esos proyectos son santos por cierto). Ellos abstraen todas las variaciones terminales realmente básicas de algo sensato. Las maldiciones hacen que aquellas en buenas bibliotecas sean eficientes para usar.

Si desea una solución pura de Java, necesitará ambas bibliotecas o sus equivalentes en Java. Estoy seguro de que alguien te señalará eso si existe, pero hasta donde yo sé, no existe.

0

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

1

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

java -Daction=doSomething MyApp 

esta manera se puede codificar su aplicación utilizando una interfaz gráfica de usuario también en caso de que necesite.

Cuestiones relacionadas