Подтвердить что ты не робот

Какой лучший способ получить текстовые пользовательские интерфейсы (ncurses-like) в Java?

Мне нужно реализовать консольное приложение (возможно, на Java) с функциями, подобными ncurses (например, навигацию по меню и перерисовку всего экрана).

Единственными решениями, которые я могу найти для этого до сих пор, являются CHARVA ( "Инструмент для создания окон Windows для текстовых терминалов" ), tuipe ( "Текстовый пользовательский интерфейс для Java AWT" ) и действительно старая статья доктора Добба ( "Текстовый интерфейс для Java AWT" ).

До сих пор CHARVA - лучшая вещь, которую я могу найти, но мне не нравится идея ее использования JNI для обертывания проклятий.

Есть ли стандартный способ, скажем, с AWT/Swing, делать это? Какие существуют другие альтернативы?

4b9b3361

Ответ 1

С 2010 года существует Lanterna:

Lanterna - это библиотека Java, позволяющая писать простые полуграфические пользовательские интерфейсы в текстовой среде, очень похожей на проклятия библиотеки C, но с большей функциональностью. Lanterna поддерживает совместимые с xterm терминалы и эмуляторы терминала, такие как консоль, гном-терминал, шпатлевка, xterm и многие другие. Одним из основных преимуществ lanterna является то, что он не зависит от какой-либо родной библиотеки, но работает на 100% в чистой Java.

Подробнее здесь: https://github.com/mabe02/lanterna

Ответ 2

Вы можете пойти голосовать за эту проблему здесь: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6351276

По сути, нет хорошего способа получить ncurses-подобные функции без JNI, пока эта проблема не будет устранена.

Ответ 3

Короткий ответ - это дело с оболочкой Java вокруг проклятий.

Длинный ответ:

Терминалы сильно различаются, поэтому существуют библиотеки terminfo/termcap и почему они бесполезны для работы (поддерживающими этих проектов являются святые btw). Они абстрагируют все действительно основные терминальные варианты на что-то здравомыслящее. Проклятия позволяют использовать их в хороших эффективных библиотеках.

Если вам нужно чистое решение Java, вам понадобятся обе библиотеки или их эквивалент в Java. Я уверен, что кто-то укажет вам на это, если он существует, но я, насколько я знаю, его не существует.

Ответ 4

Я думаю, что было бы лучше отвлечь ваш Java-код от TUI и использовать ncurses против нескольких разделенных частей вашего приложения или используя аргументы в стиле веб-сервисов. Например, код вашего TUI и когда пользователь вызывает действие, используйте ncurses для вызова вашего кода, передающего некоторые параметры

java -Daction=doSomething MyApp

Таким образом, вы можете запрограммировать свое приложение с помощью графического интерфейса и в случае необходимости.

Ответ 5

Я считаю, что Jcurses - это собственная реализация API curses java, я помню, что у него есть несколько причуд, но он должен делать то, что вы хотите:

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

Ответ 6

Попробуйте 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
 (...)
 }

}

Ответ 7

Я использую JavaTUI (http://sourceforge.net/projects/javatui/files/) в моих нескольких проектах консоли java. Это лучше всего, что я могу найти, но он пока не идеален. Я думаю, что в мире Java нет хорошей реализации TUI.