framework tut9
This commit is contained in:
parent
cc5705fc23
commit
9d0186fbfe
8 changed files with 877 additions and 0 deletions
19
.gitignore
vendored
Normal file
19
.gitignore
vendored
Normal file
|
@ -0,0 +1,19 @@
|
|||
abgaben/
|
||||
code/
|
||||
vpl/
|
||||
|
||||
# emacs stuff
|
||||
*~
|
||||
\#*#
|
||||
|
||||
# javadoc stuff
|
||||
*.html
|
||||
*.js
|
||||
*.css
|
||||
|
||||
# intellij stuff
|
||||
.idea/
|
||||
*.iml
|
||||
build/
|
||||
classes/
|
||||
out/
|
45
tut9/src/AddSet.java
Normal file
45
tut9/src/AddSet.java
Normal file
|
@ -0,0 +1,45 @@
|
|||
/**
|
||||
* @param <E> Element type.
|
||||
* Simple functional set adding an element to another simple functional set.
|
||||
*/
|
||||
public class AddSet<E> extends SimpleFunctionalSet<E>
|
||||
{
|
||||
/**
|
||||
* The element to add.
|
||||
*/
|
||||
private final E element;
|
||||
|
||||
/**
|
||||
* @param elem The element to add.
|
||||
* @param s The remaining set.
|
||||
*/
|
||||
public AddSet(E elem, SimpleFunctionalSet<E> s)
|
||||
{
|
||||
super(s);
|
||||
this.element = elem;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean contains(Object o)
|
||||
{
|
||||
if (this.element == null)
|
||||
{
|
||||
if (o == null)
|
||||
return true;
|
||||
else
|
||||
return this.getRemainingSet().contains(o);
|
||||
}
|
||||
else if (this.element.equals(o))
|
||||
return true;
|
||||
else
|
||||
return this.getRemainingSet().contains(o);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return The element to add.
|
||||
*/
|
||||
public E getElement()
|
||||
{
|
||||
return this.element;
|
||||
}
|
||||
}
|
21
tut9/src/EmptySet.java
Normal file
21
tut9/src/EmptySet.java
Normal file
|
@ -0,0 +1,21 @@
|
|||
/**
|
||||
* @param <E> Element type.
|
||||
* Simple functional set containing no element.
|
||||
*/
|
||||
public class EmptySet<E> extends SimpleFunctionalSet<E>
|
||||
{
|
||||
/**
|
||||
* Creates an empty simple functional set.
|
||||
*/
|
||||
public EmptySet()
|
||||
{
|
||||
super(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean contains(Object o)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
242
tut9/src/FunctionalSet.java
Normal file
242
tut9/src/FunctionalSet.java
Normal file
|
@ -0,0 +1,242 @@
|
|||
import java.util.*;
|
||||
|
||||
/**
|
||||
* Functional data structure for a set.
|
||||
*
|
||||
* @param <E> Element type.
|
||||
*/
|
||||
public class FunctionalSet<E> implements Set<E>
|
||||
{
|
||||
/**
|
||||
* The head of the list of operations representing the set.
|
||||
*/
|
||||
private SimpleFunctionalSet<E> head;
|
||||
|
||||
public String toString()
|
||||
{
|
||||
String res = "{";
|
||||
Iterator<E> it = iterator();
|
||||
while (it.hasNext())
|
||||
{
|
||||
res = res + it.next();
|
||||
if (it.hasNext())
|
||||
{
|
||||
res = res + ", ";
|
||||
}
|
||||
}
|
||||
return res + "}";
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates an empty functional set.
|
||||
*/
|
||||
public FunctionalSet()
|
||||
{
|
||||
this.head = new EmptySet<E>();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean add(E e)
|
||||
{
|
||||
if (this.contains(e))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
this.head = new AddSet<E>(e, this.head);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean addAll(Collection<? extends E> c)
|
||||
{
|
||||
boolean res = false;
|
||||
for (E elem : c)
|
||||
{
|
||||
res |= this.add(elem);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clear()
|
||||
{
|
||||
this.head = new EmptySet<E>();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean contains(Object o)
|
||||
{
|
||||
return this.head.contains(o);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean containsAll(Collection<?> c)
|
||||
{
|
||||
for (Object o : c)
|
||||
{
|
||||
if (!this.contains(o))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o)
|
||||
{
|
||||
if (this == o)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else if (o == null || o.getClass() != this.getClass())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
FunctionalSet<?> set = (FunctionalSet<?>) o;
|
||||
return this.containsAll(set) && set.containsAll(this);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode()
|
||||
{
|
||||
int res = 5;
|
||||
final int prime = 7;
|
||||
for (E elem : this)
|
||||
{
|
||||
res += prime * elem.hashCode();
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEmpty()
|
||||
{
|
||||
return this.size() == 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Iterator<E> iterator()
|
||||
{
|
||||
return new FunctionalSetIterator<E>(this, this.head);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean remove(Object o)
|
||||
{
|
||||
if (this.contains(o))
|
||||
{
|
||||
this.head = new RemoveSet<E>(o, this.head);
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean removeAll(Collection<?> c)
|
||||
{
|
||||
boolean res = false;
|
||||
for (Object o : c)
|
||||
{
|
||||
res |= this.remove(o);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean retainAll(Collection<?> c)
|
||||
{
|
||||
List<E> store = new ArrayList<E>();
|
||||
boolean change = false;
|
||||
for (E elem : this)
|
||||
{
|
||||
if (c.contains(elem))
|
||||
{
|
||||
store.add(elem);
|
||||
}
|
||||
else
|
||||
{
|
||||
change = true;
|
||||
}
|
||||
}
|
||||
if (change)
|
||||
{
|
||||
this.clear();
|
||||
for (E elem : store)
|
||||
{
|
||||
this.add(elem);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int size()
|
||||
{
|
||||
int res = 0;
|
||||
for (Iterator<E> it = this.iterator(); it.hasNext(); it.next())
|
||||
{
|
||||
res++;
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object[] toArray()
|
||||
{
|
||||
Object[] res = new Object[this.size()];
|
||||
int i = 0;
|
||||
for (E elem : this)
|
||||
{
|
||||
res[i] = elem;
|
||||
i++;
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public <T> T[] toArray(T[] a)
|
||||
{
|
||||
final int size = this.size();
|
||||
final T[] res;
|
||||
if (a.length < size)
|
||||
{
|
||||
res = Arrays.copyOf(a, size);
|
||||
}
|
||||
else
|
||||
{
|
||||
res = a;
|
||||
}
|
||||
int i = 0;
|
||||
for (E elem : this)
|
||||
{
|
||||
try
|
||||
{
|
||||
res[i] = (T) elem;
|
||||
}
|
||||
catch (ClassCastException e)
|
||||
{
|
||||
throw new ArrayStoreException(
|
||||
"Element " + elem + " cannot be cast to type of specified array!"
|
||||
);
|
||||
}
|
||||
i++;
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
}
|
34
tut9/src/Main.java
Normal file
34
tut9/src/Main.java
Normal file
|
@ -0,0 +1,34 @@
|
|||
import java.util.*;
|
||||
|
||||
public class Main
|
||||
{
|
||||
public static void main(String args[])
|
||||
{
|
||||
FunctionalSet<Integer> s = new FunctionalSet<>();
|
||||
String line;
|
||||
do
|
||||
{
|
||||
line = SimpleIO.getString("Enter 'add i', 'remove i', 'min', or 'exit'!");
|
||||
String[] words = line.split(" ");
|
||||
switch (words[0])
|
||||
{
|
||||
case "exit":
|
||||
break;
|
||||
case "add":
|
||||
s.add(Integer.parseInt(words[1]));
|
||||
System.out.println(s);
|
||||
break;
|
||||
case "remove":
|
||||
s.remove(Integer.parseInt(words[1]));
|
||||
System.out.println(s);
|
||||
break;
|
||||
case "min":
|
||||
System.out.println(s.min(Comparator.<Integer>naturalOrder()));
|
||||
break;
|
||||
default:
|
||||
System.out.println("Unknown command.");
|
||||
}
|
||||
}
|
||||
while (!"exit".equals(line));
|
||||
}
|
||||
}
|
46
tut9/src/RemoveSet.java
Normal file
46
tut9/src/RemoveSet.java
Normal file
|
@ -0,0 +1,46 @@
|
|||
/**
|
||||
* @param <E> Element type.
|
||||
* Simple set removing an object from another simple set.
|
||||
*/
|
||||
public class RemoveSet<E> extends SimpleFunctionalSet<E>
|
||||
{
|
||||
/**
|
||||
* The object to remove.
|
||||
*/
|
||||
private final Object obj;
|
||||
|
||||
/**
|
||||
* @param o The object to remove.
|
||||
* @param s The remaining set.
|
||||
*/
|
||||
public RemoveSet(Object o, SimpleFunctionalSet<E> s)
|
||||
{
|
||||
super(s);
|
||||
this.obj = o;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean contains(Object o)
|
||||
{
|
||||
if (this.obj == null)
|
||||
{
|
||||
if (o == null)
|
||||
return false;
|
||||
else
|
||||
return this.getRemainingSet().contains(o);
|
||||
}
|
||||
else if (this.obj.equals(o))
|
||||
return false;
|
||||
else
|
||||
return this.getRemainingSet().contains(o);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return The object to remove.
|
||||
*/
|
||||
public Object getObject()
|
||||
{
|
||||
return this.obj;
|
||||
}
|
||||
|
||||
}
|
40
tut9/src/SimpleFunctionalSet.java
Normal file
40
tut9/src/SimpleFunctionalSet.java
Normal file
|
@ -0,0 +1,40 @@
|
|||
/**
|
||||
* @param <E> Element type.
|
||||
* Abstract class for simple functional sets just offering a characteristic function realized by the
|
||||
* contains method.
|
||||
*/
|
||||
public abstract class SimpleFunctionalSet<E>
|
||||
{
|
||||
/**
|
||||
* The remaining set.
|
||||
*/
|
||||
private final SimpleFunctionalSet<E> set;
|
||||
|
||||
/**
|
||||
* @param s The remaining set.
|
||||
*/
|
||||
public SimpleFunctionalSet(SimpleFunctionalSet<E> s)
|
||||
{
|
||||
this.set = s;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns <tt>true</tt> if this set contains the specified element.
|
||||
* More formally, contains(o) returns <tt>true</tt> if and only if this set
|
||||
* contains an element <tt>e</tt> such that
|
||||
* <tt>(o==null ? e==null : e.equals(o))</tt>.
|
||||
*
|
||||
* @param o Element whose presence in this set is to be tested.
|
||||
* @return <tt>true</tt> if this set contains the specified element.
|
||||
*/
|
||||
public abstract boolean contains(Object o);
|
||||
|
||||
/**
|
||||
* @return The remaining set.
|
||||
*/
|
||||
public SimpleFunctionalSet<E> getRemainingSet()
|
||||
{
|
||||
return this.set;
|
||||
}
|
||||
|
||||
}
|
430
tut9/src/SimpleIO.java
Normal file
430
tut9/src/SimpleIO.java
Normal file
|
@ -0,0 +1,430 @@
|
|||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.util.Optional;
|
||||
import java.util.Scanner;
|
||||
|
||||
/**
|
||||
* @author Thomas Stroeder, Maximilian Hippler
|
||||
* @version 15.11.2019
|
||||
* Actual version under: https://git.rwth-aachen.de/maxemann96/SimpleIO
|
||||
* <p>
|
||||
* Class SimpleIO - class for input of simple input types
|
||||
* via simple dialog box (or if headless System.in use)
|
||||
* and output of strings (via dialog box or System.out)
|
||||
*/
|
||||
|
||||
public class SimpleIO {
|
||||
/**
|
||||
* Initial set headless mode by environment variable and system default
|
||||
* Can be changed with preferConsole() or preferUI()
|
||||
*/
|
||||
private static boolean HEADLESS;
|
||||
|
||||
static {
|
||||
//System default
|
||||
HEADLESS = GraphicsEnvironment.isHeadless();
|
||||
|
||||
//If ENV-Variable is set, override default headless flag
|
||||
try {
|
||||
HEADLESS |= Optional.ofNullable(System.getenv("SIMPLE_IO_HEADLESS")).orElse("FALSE")
|
||||
.equalsIgnoreCase("TRUE");
|
||||
} catch (SecurityException e) {/*Ignore this exception, do not set flag if thrown*/}
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets an input object from the console. If options are supplied, the return-object ist one of options.
|
||||
* If no options are supplied, T must be a primitive type.
|
||||
*
|
||||
* @param tClass This method returns object that are instances of this tClass
|
||||
* @param title Title of the prompt
|
||||
* @param messages The messages to display the user
|
||||
* @param options The provided options, can be null, but then tClass must be primitive
|
||||
* @param initialOption The initial option (Hint for the user)
|
||||
* @param <T> To specify return type and some parameter types
|
||||
* @return The object the user entered
|
||||
*/
|
||||
private static <T> T getInputObjectConsole(Class<T> tClass, String title, Object[] messages,
|
||||
T[] options, T initialOption) {
|
||||
Scanner scanner = new Scanner(System.in);
|
||||
|
||||
System.out.println(title);
|
||||
|
||||
for (Object o : messages)
|
||||
System.out.println(o.toString());
|
||||
|
||||
if (options != null) {
|
||||
System.out.print("Bitte auswaehlen: |");
|
||||
|
||||
for (Object option : options) {
|
||||
if (option == initialOption) {
|
||||
System.out.print(" (INITIAL)");
|
||||
}
|
||||
|
||||
|
||||
System.out.print(" " + option.toString() + " |");
|
||||
}
|
||||
|
||||
System.out.println();
|
||||
}
|
||||
|
||||
String result = scanner.nextLine();
|
||||
|
||||
if (options != null) {
|
||||
for (T option : options) {
|
||||
if (option.toString().equals(result))
|
||||
return option;
|
||||
}
|
||||
|
||||
return result.equals("") && initialOption != null ? initialOption : null;
|
||||
} else {
|
||||
return parseInput(tClass, result);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets an input object from a JOptionPane. If options are supplied, the return-object ist one of options.
|
||||
* If no options are supplied, T must be a primitive type.
|
||||
*
|
||||
* @param tClass This method returns object that are instances of this tClass
|
||||
* @param title Title of the prompt
|
||||
* @param messages The messages to display the user
|
||||
* @param options The provided options, can be null, but then tClass must be primitive
|
||||
* @param initialOption The initial option (Hint for the user)
|
||||
* @param <T> To specify return type and some parameter types
|
||||
* @return The object the user entered
|
||||
*/
|
||||
private static <T> T getInputObjectJOptionPane(Class<T> tClass, String title, Object[] messages,
|
||||
T[] options, T initialOption) {
|
||||
T tmp;
|
||||
|
||||
if (options == null) {
|
||||
tmp = parseInput(tClass, JOptionPane.showInputDialog(null, messages, title, JOptionPane.QUESTION_MESSAGE));
|
||||
} else {
|
||||
// 3 or less options, display with buttons
|
||||
if (options.length <= 3) {
|
||||
int result = JOptionPane.showOptionDialog(null, messages, title,
|
||||
JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE,
|
||||
null, options, initialOption);
|
||||
|
||||
tmp = result == JOptionPane.CLOSED_OPTION ? null : options[result];
|
||||
}
|
||||
//Else display wih JComboBox
|
||||
else {
|
||||
JComboBox<T> comboBox = new JComboBox<>();
|
||||
|
||||
for (T item : options) {
|
||||
comboBox.addItem(item);
|
||||
}
|
||||
|
||||
comboBox.setSelectedItem(initialOption);
|
||||
|
||||
Object[] messagesObject = new Object[messages.length + 1];
|
||||
System.arraycopy(messages, 0, messagesObject, 0, messages.length);
|
||||
messagesObject[messages.length] = comboBox;
|
||||
|
||||
int result = JOptionPane.showOptionDialog(null, messagesObject, title,
|
||||
JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE,
|
||||
null, null, null);
|
||||
|
||||
tmp = result == JOptionPane.OK_OPTION ? (T) comboBox.getItemAt(comboBox.getSelectedIndex()) : null;
|
||||
}
|
||||
}
|
||||
|
||||
return tmp;
|
||||
}
|
||||
|
||||
/**
|
||||
* Parses the input, input must be primitive
|
||||
*
|
||||
* @param parseClass The class to return
|
||||
* @param input The String-input to parse
|
||||
* @param <T> The Type of class returned
|
||||
* @return The parsed input, for an Integer for example, Integer.valueOf(input) is used
|
||||
*/
|
||||
private static <T> T parseInput(Class<T> parseClass, String input) {
|
||||
Object toReturn = null;
|
||||
|
||||
//If user not aborted
|
||||
if (input != null) {
|
||||
//First check String
|
||||
if (parseClass.equals(String.class)) {
|
||||
toReturn = input;
|
||||
}
|
||||
//then boolean
|
||||
else if (parseClass.equals(Boolean.class)) {
|
||||
toReturn = Boolean.parseBoolean(input);
|
||||
}
|
||||
//now character
|
||||
else if (parseClass.equals(Character.class)) {
|
||||
if (input.length() != 1) {
|
||||
throw new IllegalArgumentException("Ein Char wurde erwartet, nicht der String \"" + input + "\"");
|
||||
}
|
||||
|
||||
toReturn = input.charAt(0);
|
||||
}
|
||||
//Can be an integer or ...
|
||||
else if (parseClass.equals(Integer.class)) {
|
||||
toReturn = Integer.valueOf(input);
|
||||
}
|
||||
//... a double or ...
|
||||
else if (parseClass.equals(Double.class)) {
|
||||
toReturn = Double.valueOf(input);
|
||||
}
|
||||
//a float
|
||||
else if (parseClass.equals(Float.class)) {
|
||||
toReturn = Float.valueOf(input);
|
||||
}
|
||||
}
|
||||
|
||||
//Safe call, if toReturn is not set, its null. If set, each if-Statements guarantees, that it is of type T
|
||||
return parseClass.cast(toReturn);
|
||||
}
|
||||
|
||||
/**
|
||||
* String input from the user via a simple dialog.
|
||||
*
|
||||
* @param prompt the message string to be displayed inside dialog
|
||||
* @return String input from the user. Null if user canceled providing input
|
||||
**/
|
||||
public static String getString(String prompt) {
|
||||
return getGenericObject(String.class, prompt, null, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* char input from the user via a simple dialog.
|
||||
*
|
||||
* @param prompt the message string to be displayed inside dialog
|
||||
* @return char input from the user. Character.MAX_VALUE if user canceled input.
|
||||
**/
|
||||
public static char getChar(String prompt) {
|
||||
return getChar(prompt, Character.MAX_VALUE);
|
||||
}
|
||||
|
||||
/**
|
||||
* char input from the user via a simple dialog.
|
||||
*
|
||||
* @param prompt the message string to be displayed inside dialog
|
||||
* @param defaultValue the value which will be returned if user cancels input
|
||||
* @return char input from the user.
|
||||
**/
|
||||
public static char getChar(String prompt, char defaultValue) {
|
||||
Character c = getGenericObject(Character.class, prompt, null, null);
|
||||
return c == null ? defaultValue : c;
|
||||
}
|
||||
|
||||
/**
|
||||
* boolean selection from the user via a simple dialog.
|
||||
*
|
||||
* @param prompt message to appear in dialog
|
||||
* @return boolean selection from the user. False if user canceled input.
|
||||
**/
|
||||
public static boolean getBoolean(String prompt) {
|
||||
return getBoolean(prompt, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* boolean selection from the user via a simple dialog.
|
||||
*
|
||||
* @param prompt message to appear in dialog
|
||||
* @param defaultValue the value which will be returned if user cancels input
|
||||
* @return boolean selection from the user.
|
||||
**/
|
||||
public static boolean getBoolean(String prompt, boolean defaultValue) {
|
||||
Boolean b = getGenericObject(Boolean.class, prompt, new Boolean[]{true, false}, true);
|
||||
return b == null ? defaultValue : b;
|
||||
}
|
||||
|
||||
/**
|
||||
* returns integer input from the user via a simple dialog.
|
||||
*
|
||||
* @param prompt the message string to be displayed inside dialog
|
||||
* @return the input integer. Integer.MAX_VALUE if user canceled input
|
||||
**/
|
||||
public static int getInt(String prompt) {
|
||||
return getInt(prompt, Integer.MAX_VALUE);
|
||||
}
|
||||
|
||||
/**
|
||||
* returns integer input from the user via a simple dialog.
|
||||
*
|
||||
* @param prompt the message string to be displayed inside dialog
|
||||
* @param defaultValue the value which will be returned if user cancels input
|
||||
* @return the input integer
|
||||
**/
|
||||
public static int getInt(String prompt, int defaultValue) {
|
||||
Integer i = getGenericObject(Integer.class, prompt, null, null);
|
||||
return i == null ? defaultValue : i;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* returns a float input from the user via a simple dialog.
|
||||
*
|
||||
* @param prompt the message string to be displayed inside dialog
|
||||
* @return the input float. Float.NaN if user canceled input
|
||||
**/
|
||||
public static float getFloat(String prompt) {
|
||||
return getFloat(prompt, Float.NaN);
|
||||
}
|
||||
|
||||
/**
|
||||
* returns a float input from the user via a simple dialog.
|
||||
*
|
||||
* @param prompt the message string to be displayed inside dialog
|
||||
* @param defaultValue the value which will be returned if user cancels input
|
||||
* @return the input float
|
||||
**/
|
||||
public static float getFloat(String prompt, float defaultValue) {
|
||||
Float f = getGenericObject(Float.class, prompt, null, null);
|
||||
return f == null ? defaultValue : f;
|
||||
}
|
||||
|
||||
/**
|
||||
* returns a double input from the user via a simple dialog.
|
||||
*
|
||||
* @param prompt the message string to be displayed inside dialog
|
||||
* @return the input double. Double.NaN if user canceled input
|
||||
**/
|
||||
public static double getDouble(String prompt) {
|
||||
return getDouble(prompt, Double.NaN);
|
||||
}
|
||||
|
||||
/**
|
||||
* returns a double input from the user via a simple dialog.
|
||||
*
|
||||
* @param prompt the message string to be displayed inside dialog
|
||||
* @param defaultValue the value which will be returned if user cancels input
|
||||
* @return the input double. Double.NaN if user canceled input
|
||||
**/
|
||||
public static double getDouble(String prompt, double defaultValue) {
|
||||
Double d = getGenericObject(Double.class, prompt, null, null);
|
||||
return d == null ? defaultValue : d;
|
||||
}
|
||||
|
||||
/**
|
||||
* Let the user choose between the specified options and return one of them or null
|
||||
*
|
||||
* @param prompt the message string to be displayed inside dialog
|
||||
* @param options the available options the user choose from
|
||||
* @param initialObject a hint for the user which option is default
|
||||
* @return The option, the user has chosen. Null if user canceled input.
|
||||
*/
|
||||
public static Object getObject(String prompt, Object[] options, Object initialObject) {
|
||||
return getGenericObject(Object.class, prompt, options, initialObject);
|
||||
}
|
||||
|
||||
/**
|
||||
* Let the user choose between the specified options and return one of them or null
|
||||
*
|
||||
* @param prompt the message string to be displayed inside dialog
|
||||
* @param options the available options the user choose from
|
||||
* @return The option, the user has chosen. Null if user canceled input
|
||||
*/
|
||||
public static Object getObject(String prompt, Object[] options) {
|
||||
return getGenericObject(Object.class, prompt, options, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Let the user choose one item from any enum, return null if cancelled
|
||||
*
|
||||
* @param prompt the message string to be displayed inside dialog
|
||||
* @param enumClass the enum class
|
||||
* @param initialOption the option which is default selected
|
||||
* @param <T> The enum item class
|
||||
* @return The option, the user has chosen. Null if user canceled input
|
||||
*/
|
||||
public static <T extends Enum<T>> T getFromEnum(String prompt, Class<T> enumClass, T initialOption) {
|
||||
return getGenericObject(enumClass, prompt, enumClass.getEnumConstants(), initialOption);
|
||||
}
|
||||
|
||||
/**
|
||||
* Let the user choose one item from any enum, return null if cancelled
|
||||
*
|
||||
* @param prompt the message string to be displayed inside dialog
|
||||
* @param enumClass the enum class
|
||||
* @param <T> The enum item class
|
||||
* @return The option, the user has chosen. Null if user canceled input
|
||||
*/
|
||||
public static <T extends Enum<T>> T getFromEnum(String prompt, Class<T> enumClass) {
|
||||
return getGenericObject(enumClass, prompt, enumClass.getEnumConstants(), null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Let the user choose between the specified options and return one of them. if options are null,
|
||||
* tClass must be primitive, so that the input can be parsed
|
||||
*
|
||||
* @param tClass The class to return
|
||||
* @param prompt the message string to be displayed inside dialog
|
||||
* @param options the available options the user choose from (can be null)
|
||||
* @param initialOption a hint for the user which option is default (can be null)
|
||||
* @param <T> The Type of class returned
|
||||
* @return The option, the user has chosen. Null if user canceled input
|
||||
*/
|
||||
public static <T> T getGenericObject(Class<T> tClass, String prompt,
|
||||
T[] options, T initialOption) {
|
||||
boolean isPrimitive = tClass == Double.class || tClass == Integer.class || tClass == Float.class
|
||||
|| tClass == String.class || tClass == Character.class || tClass == Boolean.class;
|
||||
|
||||
boolean hasOptions = options != null && options.length > 0;
|
||||
|
||||
if (!isPrimitive && !hasOptions) {
|
||||
throw new IllegalArgumentException("Dies ist kein primitiver Datentyp, bitte spezifizieren.");
|
||||
}
|
||||
|
||||
String title = "Eingabefenster";
|
||||
T toReturn = null;
|
||||
boolean success = false;
|
||||
Object[] commentArray = {prompt, "", ""};
|
||||
// commentArray[1] = "Please enter a " + tClass.getName();
|
||||
while (!success) {
|
||||
try {
|
||||
toReturn = HEADLESS ? getInputObjectConsole(tClass, title, commentArray, options, initialOption) :
|
||||
getInputObjectJOptionPane(tClass, title, commentArray, options, initialOption);
|
||||
success = true;
|
||||
} catch (IllegalArgumentException e) {
|
||||
//Ignore exception, prompt user again!
|
||||
commentArray[2] = "Falsche Eingabe, bitte wiederholen!";
|
||||
}
|
||||
}
|
||||
|
||||
return toReturn;
|
||||
}
|
||||
|
||||
/**
|
||||
* Prints the String passed as content in a window.
|
||||
*
|
||||
* @param content the displayed String
|
||||
**/
|
||||
public static void output(String content) {
|
||||
output(content, "Ausgabe");
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* prints the string "content" in a window with the title "prompt"
|
||||
*
|
||||
* @param content the string to be displayed
|
||||
* @param prompt the name of the window
|
||||
**/
|
||||
public static void output(String content, String prompt) {
|
||||
if (HEADLESS) {
|
||||
System.out.println(content);
|
||||
} else {
|
||||
JOptionPane.showMessageDialog(null, content, prompt, JOptionPane.PLAIN_MESSAGE);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* If the environment is not headless, input and output will be handled by ui
|
||||
*/
|
||||
public static void preferUI() {
|
||||
HEADLESS = GraphicsEnvironment.isHeadless();
|
||||
}
|
||||
|
||||
/**
|
||||
* input and output will be handled by console
|
||||
*/
|
||||
public static void preferConsole() {
|
||||
HEADLESS = true;
|
||||
}
|
||||
}
|
Reference in a new issue