1

Тема: Можливості консольного відображення в Java (консоль в живому режимі)

Хочу написати міні програму яка буде відображатися тільки в консольному виді, без візуальної оболонки тільки текст.

Виникло декілька запитань до можливостей на java:
1. Чи можливо зафіксувати деякі рядки щоб вони були в статичному режимі приклад на фото (щоб виділені червоним рядки були завжди відображені і не рухомі під час прокрутки тексту вверх і вниз який буде введений нижче);
https://replace.org.ua/extensions/om_images/img/5e81ffc68f6e9/0e8098cafd4a8153694c5de5cbc30169.jpg
2. Як зробити консоль живу? Тобто щоб всі зміни відображені були зразу і додавались до даних які виділені червоним.
3. Як можна зробити так щоб при виборі (код чуть чуть нижче) від 1 до 3 замість "Empty" значення мінялось на "предмет" який ми обрали? Тобто при виборі 1 напроти "Копійки" значенні "Empty" буде змінено на
5 копійок та до значенні "гроші" буде добавлено +5 до тих пір поки ми не вилучили їх (тобто не замінили знов на Empty);

В короткому змісті і просто: жива консоль з зафіксованими рядками, 3 так званих місці для різних "речей" по одному на тип, які можна застосовувати і так само же їх "забирати", і зміна вже існуючого та відображеного тексту і чисел в живому режимі без створення нового рядка в консолі.


    import java.util.Scanner;


public class Main {

  public static void main(String[] args) {
// глобальні перемінні які мають змінюватися і бути відображені завжди (основа консольного інтерфейсу)  
int n1 = 1; String nn1 = "Гроші: ";
int n2 = 0; String nn2 = " Вага: ";
int n3 = 10; String nn3 = " Кількість: ";

String def = "Empty";
String co = "Копійки: ";
String gr = "Грами: ";
String ht = "Штуки: ";

// копійки, значення які повинні бути фіксовані та додаватись тільки до глобальної перемінної "n1"
int c1 = 5; String cc1 = "5 копійок";
int c2 = 10; String cc2 = "10 копійок";
int c3 = 25; String cc3 = "25 копійок";
//... і так далі 

//грами вага, так само як з копійкамм тілько додавання має бути до перемінної "n2"
int g1 = 10; String gg1 = "10 грамм";
int g2 = 50; String gg2 = "50 грамм";
int g3 = 75; String gg3 = "75 грамм";
//... і тд.

//штуки, і тут такий самий метою до перемінної "n3"
int h1 = 3; String hh1 = "3 штуки";
int h2 = 5; String hh2 = "5 штук";
int h3 = 10; String hh3 = "10 штук";
//... і тд.
do {
System.out.println(nn1+n1+nn2+n2+nn3+n3);
} while (n1 == 10);
System.out.println(co+def);
System.out.println(gr+def);
System.out.println(ht+def);


Scanner scan = new Scanner(System.in);    
String act;
System.out.println("зробіть свій вибір написавши число від 1 до 3");
System.out.println("1)"+cc1);
System.out.println("2)"+gg1);
System.out.println("3)"+hh1);


do{
act = scan.nextLine();
if (act.equals("1")) {
  n1 = (n1+c1);
  System.out.println(nn1+n1);
}
} while(!act.equals("1"));
}
}   

2

Re: Можливості консольного відображення в Java (консоль в живому режимі)

Іншими словами, вам потрібні вікна в консолі.
Для початку - нащо вони вам там потрібні, якщо є вікна у графічних системах?
Ви програмуєте на Java на системі без графіки? Не думаю.
Ви хочете, щоб вивід був простий, як у консолі? То виводьте у звичайну консоль. Те, що ви хочете, буде щонайменше не менш складним, ніж графічний інтерфейс.
Ви хочете попрактикуватися? Судячи з наведеного коду, вам поки що для цього вистачить звичайної консолі (чи Swing).
Ви хочете розібратися, як працює консоль? Java - не дуже вдалий вибір мови для цього, у неї віртуальне середовище, а консоль - системна.

Подякували: Overhand, leofun012

3

Re: Можливості консольного відображення в Java (консоль в живому режимі)

koala написав:

Іншими словами, вам потрібні вікна в консолі.


Я хотів дізнатися можливості самої консолі (без swing), чи можливо щоб усі зміни були в реальному часі, з додаванням чисел до вже існуючих і відображених, тобто якщо після "run" у нас відображається "вага: 0;" добавляємо до ваги +10 і натискаємо "enter" щоб в реальному часі з "вага: 0;" змінилась на "вага: 10; у тій же самій ліній відображення без створення нової лінії.

Наприклад вигляд в консолі:

Вага = 90; Ріст = 187;
Виберіть значенні яке добавити до ваги:
1. 50
2. 40
3. 70

(Тут ми пишемо наш вибір наприклад 1)
1 (натискаємо enter)
І всі зміни які мають відбутися це модифікація в реальному часі з 90 на суму з нашим вибором, без створення нових ліній, а тільки модифікація їх. А не кожний раз добавляти по 3 нових лінії в консолі з новим результатом. І щоб лінія з запитанням:
Виберіть значенні яке добавити до ваги:
1. 50
2. 40
3. 70

Була змінена на другу (іменно змінена, а не добавлені нові лінії з новим запитанням).

Тобто в ідеалі я б хотів дізнатися чи можливо створити просто живу консоль без будь якої графіки, без swing, javaFX, із модифікацією данних, і з автоматичним очищення того що ми написали в консолі на та або інше запитання але зі збереженням модифікованого значення ваги і росту.




Щоб в нас не було 100+ ліній по типу:
Ріст 1 вага 3
Виберіть скільки додати до ваги
1. 5
2. 8
3. 10
(Вибрали 1 натиснули enter)
Ріст 6 вага 3
Виберіть скільки додати до ваги
1. 10
2. 40
3. 25
(Вибрали 2 натиснули enter)
Ріст 6 вага 43

А щоб було так:
Ріст 1 вага 3
Виберіть скільки додати до ваги
1. 5
2. 8
3. 10
(Вибрали 1 натиснули enter)
І Ріст модифікував з 1 до 6 а змінилось на друге (тобто в нас в консолі буде зажди тільки 6 ліній без додавання нових як в прикладі вище)

4

Re: Можливості консольного відображення в Java (консоль в живому режимі)

Щоб в нас не було 100+ ліній по типу:
Ріст 1 вага 3
Виберіть скільки додати до росту
1. 5
2. 8
3. 10
(Вибрали 1 натиснули enter)
Ріст 6 вага 3
Виберіть скільки додати до ваги
1. 10
2. 40
3. 25
(Вибрали 2 натиснули enter)
Ріст 6 вага 43

А щоб було так:
Ріст 1 вага 3
Виберіть скільки додати до росту
1. 5
2. 8
3. 10
(Вибрали 1 натиснули enter)
І Ріст модифікував з 1 до 6 а змінилось на друге (тобто в нас в консолі буде зажди тільки 6 ліній без додавання нових як в прикладі вище)


Виправив вагу на ріст помилився коли писав

5

Re: Можливості консольного відображення в Java (консоль в живому режимі)

Overhand написав:

...чи можливо щоб усі зміни були в реальному часі, з додаванням чисел до вже існуючих і відображених, тобто якщо після "run" у нас відображається "вага: 0;"//.

Ну зробіть цикл, на початку показуйте певну інформацію, після того як клієнт введе нові дані очистіть консоль (зверніть увагу на ОС) та виведіть оновлену інформацію.

Подякували: Overhand1

6

Re: Можливості консольного відображення в Java (консоль в живому режимі)

Візьміть один з 100500 клонів Curses для Java: JCurses, Charva, lanterna, Jcurzez, та хоч звичайний Curses (чи nCurses) через JNI.
Проблема в тому, що все це значно складніше, ніж, як мені здається, ви собі думаєте. Дуже раджу вам не зациклюватися на конкретно цій задачі, а вивчати мову.
Прочитайте ось цю мою відповідь, принаймні, перші два абзаци. Вам так буде зрозуміліше.

Подякували: leofun01, Overhand2

7

Re: Можливості консольного відображення в Java (консоль в живому режимі)

Можливості консолі залежать від реалізації консолі на рівні ОС та допоміжних програм. Якщо це щось юнікс-подібне, то для багатьох цікавих речей можна скористатись ANSI-послідовностями. На Windows ці речі початково недоступні, але обробку ANSI-послідовностей можна забезпечити додатковими програмами. Інший шлях — взаємодія з консоллю через Windows API, що, проте, виходить за межі можливостей чистої Java'и й потребує інтеграції сішного коду.

Подякували: Overhand1