This repository has been archived by the owner on Jul 2, 2018. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathInterface.java
272 lines (262 loc) · 10.8 KB
/
Interface.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
import java.util.ArrayList;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.JLabel;
import javax.swing.JPanel;
import java.awt.GridLayout;
/**
* Die Klasse Interface erstellt verschiedene User Interfaces, welche über die Hauptklasse Main aufgerufen werden.
*
* @author Jan Schneider, HfG, IoT3
* @version 2018.06.30
*/
public class Interface
{
/**
* Konstruktor für Objekte der Klasse Interface.
*/
public Interface()
{
}
/**
* Öffnet ein Fenster, welches die Änderung des Turniernames erlaubt (Standard ist WM2018).
*
* @param bisherigerTurniername Der bisherige Turniername, der beim Öffnen des Fensters mit angezeigt wird
* @return aktuelledaten Der eingegebene neue Turniername
*/
public String eingabeAufforderungTurniername(String bisherigerTurniername)
{
JTextField turniername = new JTextField();
Object[] message = {"neuer Turniername (bestehend aus Buchstaben und Zahlen)",
turniername,
"Ansonsten heißt das Turnier weiterhin:",
bisherigerTurniername,};
JOptionPane pane = new JOptionPane( message,
JOptionPane.PLAIN_MESSAGE,
JOptionPane.OK_CANCEL_OPTION);
pane.createDialog(null, "Turniername ändern").setVisible(true);
String aktuelledaten = turniername.getText();
return aktuelledaten;
}
/**
* Öffnet ein Fenster, welches eine Nachricht und Textzeile oben lins enthält und die Option die Knöpfe "OK" und "Abbrechen" zu wählen.
* Bei Auswahl von OK durch den Benutzer wird true zurückgeliefert und bei Abbrechen false.
* Diese Methode ist ein Bestätigungsfenster durch das meist nochmal überprüft wird, ob eine Methode wirklick ausgeführt werden soll.
*
* @param head Text der oben im Fenster steht
* @param nachricht Nachricht des Programms
* @return true wenn "OK" geklickt wurde, false wenn das Fenster geschlossen oder "Abbrechen" geklickt wurde.
*/
public boolean bestaetigen(String head, String nachricht)
{
int eingabe = JOptionPane.showConfirmDialog(null,
nachricht,
head,
JOptionPane.YES_NO_OPTION);
if(eingabe == 0) return true;
else return false;
}
/**
* Öffnet ein Fenster, dass eine Nachricht anzeigt.
* Dieses Fenster kann mit OK oder dem [X] geschlossen werden.
* Meist wird dem User über diese Methode eine Information angezeigt.
*
* @param head Text der oben im Fenster steht
* @param nachricht Nachricht des Programms bzw Information
*/
public void nachricht(String head, String nachricht)
{
JOptionPane.showMessageDialog(null,
nachricht,
head,
JOptionPane.WARNING_MESSAGE);
}
/**
* Öffnet ein Fenster, in das ein Spielergebnis eingetragen werden kann.
* Dies wird über vier Fleder möglich - je zwei für die Länder und zwei für deren Tore.
* Bei Auswahl von OK durch den Benutzer wird ein Array aller Felder zurückgeliefert und bei Abbrechen null.
* Eingegebene Werte werden überprüft (negativ, Leerzeichen, andere Zeichen),
* sodass nur bei korrekt ausgefüllen Feldern auch wirklich ein Array zurückgeliefert wird.
*
* @return daten Spieldaten, ansonsten null
*/
public String[] eingabeAufforderungSpielergebnis()
{
JTextField land1 = new JTextField();
JTextField tore1 = new JTextField();
JTextField land2 = new JTextField();
JTextField tore2 = new JTextField();
Object[] message = {"Mannschaft", land1,
"Tore", tore1, "Mannschaft", land2,
"Tore", tore2};
JOptionPane pane = new JOptionPane( message,
JOptionPane.PLAIN_MESSAGE,
JOptionPane.OK_CANCEL_OPTION);
pane.createDialog(null, "Spielergebnis eintragen").setVisible(true);
if(pane.getValue()!= null){
int value = ((Integer)pane.getValue()).intValue();
if(value == JOptionPane.CANCEL_OPTION)
{
return null;
}
if(!land1.getText().replaceAll("\\W","").isEmpty() && !tore1.getText().replaceAll("\\W","").isEmpty() &&
!land2.getText().replaceAll("\\W","").isEmpty() && !tore2.getText().replaceAll("\\W","").isEmpty())
{
String[] aktuelledaten = {land1.getText().replaceAll("\\W",""), tore1.getText().replaceAll("\\W",""),
land2.getText().replaceAll("\\W",""), tore2.getText().replaceAll("\\W","")};
if(Integer.valueOf(tore1.getText()) >= 0 && Integer.valueOf(tore2.getText()) >= 0)
{
return aktuelledaten;
}
else
{
nachricht("Fehler", "Sie können nur positive Werte eintragen");
return eingabeAufforderungSpielergebnis();
}
}
else
{
nachricht("Fehler", "Sie müssen alle Felder ausfüllen!");
return eingabeAufforderungSpielergebnis();
}
}
else return null;
}
/**
* Öffnet ein Fenster und zeigt den Übersichtsplan an.
* Die einzelnen Spiele werden ausgegeben, zusammen mit dem Ergebnis
*
* @param turniername Name des Turniers
* @param aktuelledaten Daten aller Spielergebnisse
*/
public void createSpielplan(String turniername, String aktuelledaten)
{
String [] teile = aktuelledaten.split(",");
JPanel panel = new JPanel( new GridLayout(1, teile.length) );
for (int i = 0; i < teile.length; i++)
{
panel.add( new JLabel("<html><div style='text-align: center;'>" + teile[i] + "</div></html>") );
}
JOptionPane pane = new JOptionPane( panel);
pane.createDialog(null, "Spielergebnisse " + turniername).setVisible(true);
}
/**
* Öffnet ein Fenster, in das der Name eines neuen Landes und dessen Gruppe eingegeben werden kann.
*
* @return aktuelledaten Landname, ansonsten null
*/
public String[] eingabeAufforderungNeuesLand()
{
JTextField gruppe = new JTextField();
JTextField name = new JTextField();
Object[] message = {"Bei Hinzufügen eines neuen Landes werden alle bisher eingespeicherten Spieldaten resetted.",
" ", "Gruppe des neuen Landes", gruppe, "Name des Landes", name};
JOptionPane pane = new JOptionPane( message,
JOptionPane.PLAIN_MESSAGE,
JOptionPane.OK_CANCEL_OPTION);
pane.createDialog(null, "Neues Land").setVisible(true);
if(pane.getValue()!= null)
{
int value = ((Integer)pane.getValue()).intValue();
if(value == JOptionPane.CANCEL_OPTION){return null;}
if(!gruppe.getText().isEmpty() && !name.getText().isEmpty())
{
String[] aktuelledaten = {gruppe.getText(), name.getText()};
return aktuelledaten;
}
else
{
nachricht("Eingabefehler", "Sie müssen alle Felder ausfüllen!");
return eingabeAufforderungNeuesLand();
}
}
else return null;
}
/**
* Öffnet ein Fenster mit einer Nachricht und vier Feldern zur Eingabe von möglichen vier Ländern.
* Mindestens zwei Länder müssen eingegeben werden.
*
* @return aktuelledaten neue Gruppe, ansonsten null
*/
public String[] eingabeAufforderungNeueGruppe()
{
JTextField gruppe = new JTextField();
JTextField name1 = new JTextField();
JTextField name2 = new JTextField();
JTextField name3 = new JTextField();
JTextField name4 = new JTextField();
Object[] message = {"Fügen sie bitte mindestens zwei Länder hinzu.", " ",
"Namen der Länder", name1, name2, name3, name4};
JOptionPane pane = new JOptionPane( message,
JOptionPane.PLAIN_MESSAGE,
JOptionPane.OK_CANCEL_OPTION);
pane.createDialog(null, "Neues Land").setVisible(true);
if(pane.getValue()!= null)
{
int value = ((Integer)pane.getValue()).intValue();
String[] datenAlt = {name1.getText(), name2.getText(), name3.getText(), name4.getText()};
ArrayList teile = new ArrayList<String>();
for (int i = 0; i < datenAlt.length; i++)
{
if(!datenAlt[i].isEmpty())
{
teile.add(datenAlt[i]);
}
}
String[] aktuelledaten = new String[teile.size()];
teile.toArray( aktuelledaten );
if( aktuelledaten.length >= 2)
{
return aktuelledaten;
}
if(value == JOptionPane.CANCEL_OPTION)
{
return null;
}
else
{
nachricht("Eingabefehler", "Sie müssen mindestens 2 Länder eingeben!");
return eingabeAufforderungNeueGruppe();
}
}
else return null;
}
/**
* Öffnet ein Fenster mit einer Nachricht und einem Feld zur Eingabe entweder möglicher Länder oder Gruppen je nach verwendung.
* Deshalb müssen die Nachricht, Kopfzeile und Beschreibung auch übergeben werden um die Variabilität zu gewährleisten.
*
* @param head Text der oben im Fenster steht
* @param nachricht Nachricht des Programms bzw Information
* @param textfeld
* @return aktuelledaten wenn alle Bedingungen erfüllt sind, ansonsten null
*/
public String eingabeAufforderungEinFeld(String head, String nachricht, String textfeld)
{
JTextField gruppe = new JTextField();
JTextField name = new JTextField();
Object[] message = {nachricht, " ", textfeld, name};
JOptionPane pane = new JOptionPane( message,
JOptionPane.PLAIN_MESSAGE,
JOptionPane.OK_CANCEL_OPTION);
pane.createDialog(null, head).setVisible(true);
if(pane.getValue()!= null)
{
int value = ((Integer)pane.getValue()).intValue();
String aktuelledaten = name.getText();
if(!aktuelledaten.isEmpty())
{
return aktuelledaten;
}
if(value == JOptionPane.CANCEL_OPTION)
{
return null;
}
else
{
nachricht("Eingabefehler", "Sie müssen alle Felder ausfüllen!");
return eingabeAufforderungEinFeld(head, nachricht, textfeld);
}
}
else return null;
}
}