Quelle est la meilleure façon d'obtenir le texte interfaces utilisateur (ncurses-like) fonctionnalité en Java?

StackOverflow https://stackoverflow.com/questions/1321308

  •  19-09-2019
  •  | 
  •  

Question

Je dois mettre en œuvre une application console (éventuellement en Java) grâce à des fonctionnalités comme ncurses (telles que la navigation d'un menu et redessiner tout l'écran).

Les seules solutions que je peux trouver pour ce faire jusqu'à présent sont CHARVA ( » Un fenêtrage Java Toolkit pour les terminaux texte "), tuipeer (" Une interface utilisateur de texte pour Java AWT ") et un très ancien article du Dr Dobb ( "une interface de texte pour Java AWT « ).

Jusqu'à présent, CHARVA est la meilleure chose que je peux trouver, mais je n'aime pas l'idée de l'aide JNI pour envelopper malédictions.

Y at-il moyen standard, dire avec AWT / Swing, pour ne le faire? Quelles autres sont les alternatives?

Était-ce utile?

La solution

Depuis 2010, il est Lanterna:

  

Lanterna est une bibliothèque Java qui vous permet d'écrire facilement des interfaces utilisateur semi-graphique dans un environnement de texte seul, très semblable à la malédiction de la bibliothèque C, mais avec plus de fonctionnalités. Lanterna soutient les terminaux compatibles xterm et émulateurs de terminaux tels que konsole, gnome-terminal, mastic, xterm et beaucoup d'autres. L'un des principaux avantages de Lanterna est qu'il est ne dépend d'aucune bibliothèque native mais exécute 100% en Java pur.

Plus d'informations ici: https://github.com/mabe02/lanterna

Autres conseils

Vous pouvez aller voter pour cette question ici: http: // bogues .sun.com / bugdatabase / view_bug.do? bug_id = 6351276

Pour l'essentiel il n'y a pas de bonne façon d'obtenir des fonctionnalités ncurses comme sans JNI jusqu'à ce que cette question est traitée.

Je crois Jcurses est une implémentation Java native de l'API malédictions, je me souviens avoir quelques bizarreries, mais il devrait être en mesure de faire ce que vous voulez:

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

Essayez malédictions java de (désolé il utilise JNI). J'ai aussi essayé de mettre en œuvre une version courte de cette bibliothèque juste pour apprendre JNI, voir http://plindenbaum.blogspot.com/2008/01/java-native-interface-jni-notebook.html . On pourrait aussi imaginer un JPanel spécialisé affichant une matrice de caractères:

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

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

}

La réponse courte est affaire avec un wrapper Java autour malédictions.

La réponse longue:

Les bornes varient beaucoup, ce qui est pourquoi terminfo / bibliothèques termcap existent et pourquoi ils sont un gâchis pour traiter (les mainteneurs de ces projets sont saints BTW). Ils abstraire toutes les variations de terminaux vraiment de base à quelque chose de sain d'esprit. Curses font les bibliothèques dans de belles efficaces à utiliser.

Si vous voulez une solution pure Java, vous aurez besoin ces deux bibliothèques ou leur équivalent en Java. Je suis sûr que quelqu'un va vous indiquer que si elle existe, mais je pour autant que je sais qu'il n'existe pas.

J'utilise JavaTUI ( http://sourceforge.net/projects/javatui/files/ ) dans mes différents projets java console. Il est préférable que je peux trouver, mais si loin d'être parfait. Je pense qu'il n'y a pas une bonne TUI dans le monde de Implémentation java.

Je pense qu'il serait préférable de le code abstrait votre Java de la TUI et utiliser ncurses contre plusieurs parties séparées de votre application ou en utilisant des arguments, dans un style de services Web. Par exemple, le code de votre TUI et lorsque l'utilisateur appelle une action, utilisez ncurses pour appeler votre code qui passe certains paramètres

java -Daction=doSomething MyApp

De cette façon, vous pouvez coder votre application en utilisant une interface graphique aussi dans le cas où vous avez besoin.

Vous pouvez Jexer - Java Text Interface utilisateur:

https://github.com/klamonte/jexer

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top