feat: add input value window

Add a reusable window for entering and editing values.
This commit is contained in:
2026-08-28 19:35:33 +04:00
parent faae240b1d
commit bce5707f5e
2 changed files with 56 additions and 54 deletions
@@ -1,54 +0,0 @@
package ru.project.ui.window;
import com.googlecode.lanterna.gui2.Button;
import com.googlecode.lanterna.gui2.Label;
import com.googlecode.lanterna.gui2.LinearLayout;
import com.googlecode.lanterna.gui2.Panel;
import com.googlecode.lanterna.gui2.TextBox;
import com.googlecode.lanterna.gui2.WindowBasedTextGUI;
import java.util.function.IntConsumer;
import ru.project.ui.base.BaseWindow;
public class CollectionSizeInputWindow extends BaseWindow {
private final TextBox sizeTextBox;
private final IntConsumer onSizeEntered;
public CollectionSizeInputWindow(WindowBasedTextGUI gui, IntConsumer onSizeEntered) {
super("Задать размер", gui);
this.onSizeEntered = onSizeEntered;
Panel panel = new Panel();
panel.setLayoutManager(new LinearLayout());
panel.addComponent(new Label("Введите размер:"));
sizeTextBox = new TextBox();
panel.addComponent(sizeTextBox);
panel.addComponent(new Button("Подтвердить", this::handleSizeEntered));
panel.addComponent(new Button("Выйти", this::close));
setComponent(panel);
}
private void handleSizeEntered() {
try {
int size = Integer.parseInt(sizeTextBox.getText().trim());
if (size <= 0) {
MessageWindow.create(gui, "Размер должен быть больше 0.");
return;
}
close();
onSizeEntered.accept(size);
} catch (NumberFormatException e) {
MessageWindow.create(gui, "Введите целое число.");
}
}
}
@@ -0,0 +1,56 @@
package ru.project.ui.window;
import com.googlecode.lanterna.gui2.Button;
import com.googlecode.lanterna.gui2.Label;
import com.googlecode.lanterna.gui2.LinearLayout;
import com.googlecode.lanterna.gui2.Panel;
import com.googlecode.lanterna.gui2.TextBox;
import com.googlecode.lanterna.gui2.WindowBasedTextGUI;
import java.util.function.Predicate;
import ru.project.ui.base.BaseWindow;
public class InputValueWindow extends BaseWindow {
private final TextBox textBox;
private final Predicate<String> onSave;
public InputValueWindow(
WindowBasedTextGUI gui,
String title,
String prompt,
String initialValue,
Predicate<String> onSave) {
super(title, gui);
this.onSave = onSave;
Panel panel = new Panel();
panel.setLayoutManager(new LinearLayout());
panel.addComponent(new Label(prompt));
textBox = new TextBox(initialValue == null ? "" : initialValue);
panel.addComponent(textBox);
panel.addComponent(new Button("Сохранить", this::save));
panel.addComponent(new Button("Отмена", this::close));
setComponent(panel);
}
private void save() {
String value = textBox.getText().trim();
if (value.isEmpty()) {
MessageWindow.show(gui, "Значение не может быть пустым.");
return;
}
if (onSave.test(value)) {
close();
}
}
}