web-dev-qa-db-ja.com

Javaでテキストユーザーインターフェイス(ncursesのような)機能を取得するための最良の方法は何ですか?

Ncursesのような機能(メニューのナビゲートや画面全体の再描画など)を備えたコンソールアプリケーション(おそらくJavaで)を実装する必要があります。

これを行うためにこれまでに見つけた唯一の解決策は、CHARVA( "A Java Windowing Toolkit for Text Terminals" )、tuipeer( "A Java AWT " )のテキストユーザーインターフェイスと、非常に古いDr. Dobbの記事( " JavaのテキストUI) AWT " )。

これまでのところ、CHARVAは私が見つけることができる最高のものですが、JNIを使​​用して呪いを包むというアイデアは好きではありません。

これを行うための標準的な方法はありますか?たとえば、AWT/Swingを使用しますか?他にどのような選択肢がありますか?

23
Anthony

2010年以来、ランテルナがあります:

LanternaはJavaライブラリであり、テキストのみの環境で簡単なセミグラフィカルユーザーインターフェイスを記述できます。Cライブラリcursesと非常に似ていますが、より多くの機能を備えています。Lanternaはxterm互換端末とkonsole、gnome-terminal、PuTTY、xtermなどのターミナルエミュレーター。lanternaの主な利点の1つは、ネイティブライブラリに依存せず、純粋なJavaで100%実行されることです。

詳細はこちら: https://github.com/mabe02/lanterna

27

ここでこの問題に投票することをお勧めします: http://bugs.Sun.com/bugdatabase/view_bug.do?bug_id=6351276

基本的に、この問題が解決されるまで、JNIなしでncursesのような機能を取得する良い方法はありません。

10
stinkymatt

簡単な答えは、Javaの呪いのラッパーです。

長い答え:

ターミナルは大きく異なります。そのため、terminfo/termcapライブラリが存在し、それらを処理するのが面倒です(これらのプロジェクトのメンテナは聖人です)。彼らはすべての本当に基本的な端末のバリエーションを何か正気に抽象化します。呪いは、ニースのそれらを効率的なライブラリで使用できるようにします。

純粋なJavaソリューションが必要な場合は、Javaでこれらのライブラリまたは同等のライブラリの両方が必要になります。存在する場合は誰かがそれを指摘すると確信していますが、私はそれが存在しないことを知っています。

1
D'Nabre

私はいくつかのコンソールでJavaTUI( http://sourceforge.net/projects/javatui/files/ )を使用していますJavaプロジェクト。しかし、これまでのところ完璧にはほど遠いです。Javaの世界ではTUIの適切な実装はないと思います。

1
Alexey Sviridov

JcursesはcursesAPIのネイティブJava実装であると思います。いくつかの癖があることを思い出しますが、必要なことを実行できるはずです。

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

1
textmode

試してください Java curses (申し訳ありませんがJNIを使​​用しています)。また、JNIを学習するためだけに、このライブラリの短いバージョンを実装しようとしました。 http://plindenbaum.blogspot.com/2008/01/Java-native-interface-jni-notebook.html を参照してください。文字のマトリックスを表示する特殊なJPanelを想像することもできます。

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

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

}
1
Pierre

JavaコードをTUIから抽象化し、アプリケーションのいくつかの分離された部分に対してncursesを使用するか、Webサービススタイルで引数を使用する方がよいと思います。たとえば、TUIをコーディングします。ユーザーがアクションを呼び出すときは、ncursesを使用して、いくつかのパラメーターを渡してコードを呼び出します

Java -Daction=doSomething MyApp

このようにして、必要な場合にもGUIを使用してアプリをコーディングできます。

1
Eldelshell

Jexerを試すことができます-Javaテキストユーザーインターフェイス:

https://github.com/klamonte/jexer

0
Yousha Aleayoub