
com.googlecode.lanterna.gui2.dialogs.TextInputDialog Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of lanterna Show documentation
Show all versions of lanterna Show documentation
Java library for creating text-based terminal GUIs
/*
* This file is part of lanterna (http://code.google.com/p/lanterna/).
*
* lanterna is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see .
*
* Copyright (C) 2010-2017 Martin Berglund
*/
package com.googlecode.lanterna.gui2.dialogs;
import com.googlecode.lanterna.TerminalSize;
import com.googlecode.lanterna.gui2.*;
import java.math.BigInteger;
import java.util.regex.Pattern;
/**
* {@code TextInputDialog} is a modal text input dialog that prompts the user to enter a text string. The class supports
* validation and password masking. The builder class to help setup {@code TextInputDialog}s is
* {@code TextInputDialogBuilder}.
*/
public class TextInputDialog extends DialogWindow {
private final TextBox textBox;
private final TextInputDialogResultValidator validator;
private String result;
TextInputDialog(
String title,
String description,
TerminalSize textBoxPreferredSize,
String initialContent,
TextInputDialogResultValidator validator,
boolean password) {
super(title);
this.result = null;
this.textBox = new TextBox(textBoxPreferredSize, initialContent);
this.validator = validator;
if(password) {
textBox.setMask('*');
}
Panel buttonPanel = new Panel();
buttonPanel.setLayoutManager(new GridLayout(2).setHorizontalSpacing(1));
buttonPanel.addComponent(new Button(LocalizedString.OK.toString(), new Runnable() {
@Override
public void run() {
onOK();
}
}).setLayoutData(GridLayout.createLayoutData(GridLayout.Alignment.CENTER, GridLayout.Alignment.CENTER, true, false)));
buttonPanel.addComponent(new Button(LocalizedString.Cancel.toString(), new Runnable() {
@Override
public void run() {
onCancel();
}
}));
Panel mainPanel = new Panel();
mainPanel.setLayoutManager(
new GridLayout(1)
.setLeftMarginSize(1)
.setRightMarginSize(1));
if(description != null) {
mainPanel.addComponent(new Label(description));
}
mainPanel.addComponent(new EmptySpace(TerminalSize.ONE));
textBox.setLayoutData(
GridLayout.createLayoutData(
GridLayout.Alignment.FILL,
GridLayout.Alignment.CENTER,
true,
false))
.addTo(mainPanel);
mainPanel.addComponent(new EmptySpace(TerminalSize.ONE));
buttonPanel.setLayoutData(
GridLayout.createLayoutData(
GridLayout.Alignment.END,
GridLayout.Alignment.CENTER,
false,
false))
.addTo(mainPanel);
setComponent(mainPanel);
}
private void onOK() {
String text = textBox.getText();
if(validator != null) {
String errorMessage = validator.validate(text);
if(errorMessage != null) {
MessageDialog.showMessageDialog(getTextGUI(), getTitle(), errorMessage, MessageDialogButton.OK);
return;
}
}
result = text;
close();
}
private void onCancel() {
close();
}
@Override
public String showDialog(WindowBasedTextGUI textGUI) {
result = null;
super.showDialog(textGUI);
return result;
}
/**
* Shortcut for quickly showing a {@code TextInputDialog}
* @param textGUI GUI to show the dialog on
* @param title Title of the dialog
* @param description Description of the dialog
* @param initialContent What content to place in the text box initially
* @return The string the user typed into the text box, or {@code null} if the dialog was cancelled
*/
public static String showDialog(WindowBasedTextGUI textGUI, String title, String description, String initialContent) {
TextInputDialog textInputDialog = new TextInputDialogBuilder()
.setTitle(title)
.setDescription(description)
.setInitialContent(initialContent)
.build();
return textInputDialog.showDialog(textGUI);
}
/**
* Shortcut for quickly showing a {@code TextInputDialog} that only accepts numbers
* @param textGUI GUI to show the dialog on
* @param title Title of the dialog
* @param description Description of the dialog
* @param initialContent What content to place in the text box initially
* @return The number the user typed into the text box, or {@code null} if the dialog was cancelled
*/
public static BigInteger showNumberDialog(WindowBasedTextGUI textGUI, String title, String description, String initialContent) {
TextInputDialog textInputDialog = new TextInputDialogBuilder()
.setTitle(title)
.setDescription(description)
.setInitialContent(initialContent)
.setValidationPattern(Pattern.compile("[0-9]+"), "Not a number")
.build();
String numberString = textInputDialog.showDialog(textGUI);
return numberString != null ? new BigInteger(numberString) : null;
}
/**
* Shortcut for quickly showing a {@code TextInputDialog} with password masking
* @param textGUI GUI to show the dialog on
* @param title Title of the dialog
* @param description Description of the dialog
* @param initialContent What content to place in the text box initially
* @return The string the user typed into the text box, or {@code null} if the dialog was cancelled
*/
public static String showPasswordDialog(WindowBasedTextGUI textGUI, String title, String description, String initialContent) {
TextInputDialog textInputDialog = new TextInputDialogBuilder()
.setTitle(title)
.setDescription(description)
.setInitialContent(initialContent)
.setPasswordInput(true)
.build();
return textInputDialog.showDialog(textGUI);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy