2009-08-24 7 views
21

Ho bisogno di implementare un'applicazione console (possibilmente in Java) con funzionalità tipo ncurses (come la navigazione in un menu e il ridisegno dell'intero schermo).Qual è il modo migliore per ottenere funzionalità di interfaccia utente di testo (tipo ncurses) in Java?

Le uniche soluzioni che riesco a trovare finora sono CHARVA ("A Java Windowing Toolkit for Text Terminals"), tuipeer ("A Text User Interface for the Java AWT") e un vecchio articolo del Dr. Dobb ("A Text UI for the Java AWT ").

Finora, CHARVA è la cosa migliore che riesco a trovare ma non mi piace l'idea che usi JNI per avvolgere maledizioni.

Esiste un modo standard, ad esempio con AWT/Swing, per eseguire questa operazione? Quali altre alternative ci sono?

+0

Ho guardato in questo un paio di anni fa e non ha trovato più di quanto si ha. Sospetto che il problema sia che la funzionalità di terminale di basso livello è altamente specifica per la piattaforma e non solo a livello di sistema operativo ma a livello di emulatore terminale (VT100, xterm, ecc.). Non sono sicuro di come andrei a occuparmene, senza avvolgere un'API nativa come curses (o termcap/terminfo, almeno) che già lo astraggono. Suppongo che potresti parlare di caratteri di controllo grezzi a 'System.out'. –

+0

Parlare di caratteri di controllo non elaborati su stdout è esattamente come maledire, quindi è un'idea sensata, anche se un notevole lavoro. – skaffman

+2

Cosa c'è che non va con JNI? Vorrei andare con CHARVA, sembra completo (ish). –

risposta

0

credo Jcurses è un'implementazione Java nativo delle API maledizioni, mi ricordo che ha un paio di stranezze, ma dovrebbe essere in grado di fare ciò che si vuole:

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

+0

sembra che usi JNI anche – skaffman

+0

Non viene aggiornato in sette anni, anche se ... Sembra anche utilizzare un codice nativo, probabilmente usando JNI. –

0

Prova java curses (scusate usa JNI). Ho anche provato ad implementare una versione breve di questa libreria solo per imparare JNI, vedere http://plindenbaum.blogspot.com/2008/01/java-native-interface-jni-notebook.html. Si potrebbe anche immaginare uno JPanel specializzato che mostri una matrice di caratteri:

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

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

} 
1

La risposta breve si occupa di un wrapper Java attorno a curses.

La risposta lunga:

terminali variano molto, ed è per questo esistono terminfo librerie/termcap e perché sono un disastro a che fare con (I manutentori di questi progetti sono santi btw). Astraggono tutte le variazioni terminali di base a qualcosa di sano. Le maledizioni li rendono utilizzabili in librerie efficienti.

Se si desidera una soluzione Java pura, occorrono entrambe le librerie o il loro equivalente in Java. Sono sicuro che qualcuno te lo indicherà se esiste, ma per quanto ne so non esiste.

0

Sto usando JavaTUI (http://sourceforge.net/projects/javatui/files/) nei miei diversi progetti java della console. È meglio quello che riesco a trovare ma è così lontano dal perfetto. Penso che non ci sia una buona implementazione TUI nel mondo java.

1

Penso che sarebbe meglio astrarre il codice Java dal TUI e utilizzare ncurses su diverse parti separate dell'applicazione o utilizzare argomenti, in uno stile di servizi Web. Ad esempio, il codice tua TUI e quando l'utente richiama un'azione, usare ncurses per chiamare il codice passando alcuni parametri

java -Daction=doSomething MyApp 

In questo modo è possibile codificare la vostra applicazione utilizzando una GUI anche nel caso in cui è necessario.

Problemi correlati