From 4845a4d96944369e8350f15b25384bcc53c35526 Mon Sep 17 00:00:00 2001 From: bculkin2442 Date: Fri, 29 Jul 2016 23:18:54 -0400 Subject: Added some new GUI utilities * One is an adaptation of the simple dialogs to work on JDesktopPanes * The other is a simple control for lists of strings --- .../java/bjc/utils/gui/SimpleInternalDialogs.java | 226 +++++++++++++++++++++ 1 file changed, 226 insertions(+) create mode 100644 BJC-Utils2/src/main/java/bjc/utils/gui/SimpleInternalDialogs.java (limited to 'BJC-Utils2/src/main/java/bjc/utils/gui/SimpleInternalDialogs.java') diff --git a/BJC-Utils2/src/main/java/bjc/utils/gui/SimpleInternalDialogs.java b/BJC-Utils2/src/main/java/bjc/utils/gui/SimpleInternalDialogs.java new file mode 100644 index 0000000..82946f0 --- /dev/null +++ b/BJC-Utils2/src/main/java/bjc/utils/gui/SimpleInternalDialogs.java @@ -0,0 +1,226 @@ +package bjc.utils.gui; + +import java.awt.Component; +import java.util.function.Function; +import java.util.function.Predicate; + +import javax.swing.JOptionPane; + +/** + * Utility class for getting simple input from the user. Modified to work + * with JDesktopPanes + * + * @author ben + * + */ +public class SimpleInternalDialogs { + /** + * Get a bounded integer from the user. + * + * @param parent + * The parent component for the dialogs. + * @param title + * The title for the dialogs. + * @param prompt + * The prompt to tell the user what to enter. + * @param lowerBound + * The lower integer bound to accept. + * @param upperBound + * The upper integer bound to accept. + * @return A int within the specified bounds. + */ + public static int getBoundedInt(Component parent, String title, + String prompt, int lowerBound, int upperBound) { + return getValue(parent, title, prompt, (strang) -> { + try { + int value = Integer.parseInt(strang); + + return (value < upperBound) && (value > lowerBound); + } catch (@SuppressWarnings("unused") NumberFormatException nfex) { + // We don't care about the specifics of the exception, just + // that this value isn't good + return false; + } + }, Integer::parseInt); + } + + /** + * Get a integer from the user + * + * @param parent + * The parent component for dialogs. + * @param title + * The title for dialogs. + * @param prompt + * The prompt to tell the user what to enter. + * @return A int. + */ + public static int getInt(Component parent, String title, + String prompt) { + return getValue(parent, title, prompt, strang -> { + try { + Integer.parseInt(strang); + return true; + } catch (@SuppressWarnings("unused") NumberFormatException nfex) { + // We don't care about this exception, just mark the value + // as not good + return false; + } + }, Integer::parseInt); + } + + /** + * Get a string from the user + * + * @param parent + * The parent component for dialogs. + * @param title + * The title for the dialogs. + * @param prompt + * The prompt to tell the user what to enter. + * @return A string. + */ + public static String getString(Component parent, String title, + String prompt) { + if (parent == null) { + throw new NullPointerException("Parent must not be null"); + } else if (title == null) { + throw new NullPointerException("Title must not be null"); + } else if (prompt == null) { + throw new NullPointerException("Prompt must not be null"); + } + + return JOptionPane.showInternalInputDialog(parent, prompt, title, + JOptionPane.QUESTION_MESSAGE); + } + + /** + * Get a value parsable from a string from the user. + * + * @param + * The type of the value parsed from the string + * + * @param parent + * The parent component for dialogs. + * @param title + * The title for dialogs. + * @param prompt + * The prompt to tell the user what to enter. + * @param inputValidator + * A predicate to determine if a input is valid. + * @param inputTransformer + * The function to transform the string into a value. + * @return The value parsed from a string. + */ + public static E getValue(Component parent, String title, + String prompt, Predicate inputValidator, + Function inputTransformer) { + if (inputValidator == null) { + throw new NullPointerException("Validator must not be null"); + } else if (inputTransformer == null) { + throw new NullPointerException("Transformer must not be null"); + } + + String inputString = getString(parent, title, prompt); + + while (!inputValidator.test(inputString)) { + showError(parent, "I/O Error", "Please enter a valid value"); + + inputString = getString(parent, title, prompt); + } + + return inputTransformer.apply(inputString); + } + + /** + * Get a whole number from the user. + * + * @param parent + * The parent component for dialogs. + * @param title + * The title for dialogs. + * @param prompt + * The prompt to tell the user what to enter. + * @return A whole number. + */ + public static int getWhole(Component parent, String title, + String prompt) { + return getBoundedInt(parent, title, prompt, 0, Integer.MAX_VALUE); + } + + /** + * Ask the user a Yes/No question. + * + * @param parent + * The parent component for dialogs. + * @param title + * The title for dialogs. + * @param question + * The question to ask the user. + * @return True if the user said yes, false otherwise. + */ + public static boolean getYesNo(Component parent, String title, + String question) { + if (parent == null) { + throw new NullPointerException("Parent must not be null"); + } else if (title == null) { + throw new NullPointerException("Title must not be null"); + } else if (question == null) { + throw new NullPointerException("Question must not be null"); + } + + int dialogResult = JOptionPane.showInternalConfirmDialog(parent, question, + title, JOptionPane.YES_NO_OPTION); + + return (dialogResult == JOptionPane.YES_OPTION ? true : false); + } + + /** + * Show a error message to the user + * + * @param parent + * The parent component for dialogs. + * @param title + * The title for dialogs. + * @param errorMessage + * The error to show the user. + */ + public static void showError(Component parent, String title, + String errorMessage) { + if (parent == null) { + throw new NullPointerException("Parent must not be null"); + } else if (title == null) { + throw new NullPointerException("Title must not be null"); + } else if (errorMessage == null) { + throw new NullPointerException( + "Error message must not be null"); + } + + JOptionPane.showInternalMessageDialog(parent, errorMessage, title, + JOptionPane.ERROR_MESSAGE); + } + + /** + * Show an informative message to the user + * + * @param parent + * The parent for this dialog + * @param title + * Show the title for this dialog + * @param message + * Show the message for this dialog + */ + public static void showMessage(Component parent, String title, + String message) { + if (parent == null) { + throw new NullPointerException("Parent must not be null"); + } else if (title == null) { + throw new NullPointerException("Title must not be null"); + } else if (message == null) { + throw new NullPointerException("Message must not be null"); + } + + JOptionPane.showInternalMessageDialog(parent, title, message, + JOptionPane.INFORMATION_MESSAGE); + } +} \ No newline at end of file -- cgit v1.2.3