158 lines
5.6 KiB
Java
158 lines
5.6 KiB
Java
|
|
// Imports:
|
|
import java.awt.event.ActionEvent;
|
|
import java.awt.event.ActionListener;
|
|
import java.sql.SQLException;
|
|
|
|
import javax.swing.JButton;
|
|
import javax.swing.JFrame;
|
|
import javax.swing.JLabel;
|
|
import javax.swing.JPanel;
|
|
import javax.swing.JTextField;
|
|
import java.sql.ResultSet;
|
|
|
|
// Diese Klasse wird benötigt, um nach dem Beenden des Spiels seinen Namen mit dem Score in die Datenbank einzutragen.
|
|
|
|
public class GUI extends JFrame { // extends JFrame --> Jede 'GUI' ist auch ein 'JFrame'
|
|
|
|
private static final long serialVersionUID = -2037442253698128981L;
|
|
|
|
int spielNr; // Nummer des aktuellen Spiels (später entnommen aus der Datenbank)
|
|
int score; // Anahl erreichter Ballwechsel im zuletzt beendeten Spiel
|
|
|
|
// Deklarieren der GUI - Elemente:
|
|
JPanel panel; // Auf dem Panel werden alle GUI - Elemente gespeichert
|
|
|
|
JTextField eingabe; // Eingabefeld für Namen des Spielers
|
|
JButton enter; // Ein Button, der wenn er gedrückt wird, die Daten in die Datenbank einfügen
|
|
// soll
|
|
JLabel info; // Ein JLabel auf dem ein kurzer Info - Text abgebildet wird
|
|
|
|
// Die folgenden JLabel werden für die Bestenliste benötigt, welche unter den
|
|
// anderen GUI - Elementen abgebildet werden soll.
|
|
JLabel scores[]; // Hier werden die Top 10 Scores angezeigt
|
|
JLabel names[]; // Hier werden die Namen der Personen mit den Top 10 Scores angezeigt
|
|
JLabel gameNr[]; // Hier werden die gameNr des jeweiligen Top 10 Lauf angezeigt
|
|
|
|
ResultSet rs; // Hier wird das Ergebnis der Abfrage der Datenbank gespeichert
|
|
|
|
MySQLConnector datenbank; // Die Datenbank, auf der alles gespeichert ist
|
|
|
|
public GUI(int score) throws SQLException { // Erstellen des Konstruktors mit der Eingabe score
|
|
|
|
// Initialisieren der Datenbank
|
|
// datenbank = new MySQLConnector("LenzundTilman", "Xc37zTVG8", "10.16.225.2",
|
|
// "pong");
|
|
|
|
this.score = score; // score wird initialisiert mit dem Wert des erreichten Scores (Kontakte des
|
|
// Spielers mit dem Ball)
|
|
|
|
// datenbank.connect(); // Herstellen der Verbindung zur Datenbank:
|
|
// spielNr = datenbank.getRowCount("highscore") + 1; // Errechnung der aktuellen
|
|
// Spielnummer
|
|
|
|
// Initialisieren der GUI - Elemente:
|
|
panel = new JPanel();
|
|
eingabe = new JTextField();
|
|
enter = new JButton("Enter");
|
|
info = new JLabel("Congrats! You achieved a Score of " + score + "! Please enter a name!");
|
|
|
|
spielNr = 1000;
|
|
// Initialisieren des Frames:
|
|
this.setBounds(300, 300, 370, 400); // Setzen der Position auf dem Monito und der Größe
|
|
this.setVisible(true); // Sichtbarkeit des Frames
|
|
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Progamm wird geschlossen wenn das Fenster
|
|
// geschlossen wird
|
|
this.setTitle("Game " + spielNr); // Der Titel des Frames wird gesetzt.
|
|
this.setContentPane(panel);
|
|
this.getContentPane();
|
|
this.setResizable(false); // Festergrösse ist unveränderlich
|
|
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Progamm wird geschlossen wenn das Fenster geschlossen
|
|
// wird
|
|
this.getContentPane().setLayout(null); // kein Layout
|
|
|
|
scores = new JLabel[11];
|
|
names = new JLabel[11];
|
|
gameNr = new JLabel[11];
|
|
|
|
// Tabellennamen für die Top 10 Tabelle werden gestzt:
|
|
scores[0] = new JLabel("Score");
|
|
names[0] = new JLabel("Name");
|
|
gameNr[0] = new JLabel("Game No.");
|
|
|
|
panel.add(scores[0]);
|
|
panel.add(names[0]);
|
|
panel.add(gameNr[0]);
|
|
|
|
scores[0].setBounds(300, 120, 150, 20);
|
|
names[0].setBounds(150, 120, 150, 20);
|
|
gameNr[0].setBounds(0, 120, 150, 20);
|
|
|
|
// Anfrage an die Datenbank wird gestellt:
|
|
// rs = datenbank.executeQuery("SELECT * FROM highscore ORDER BY Score DESC");
|
|
|
|
// Erstellen der Top 10 Liste:
|
|
for (int i = 1; i < scores.length; i++) {
|
|
try {
|
|
// rs.next(); // Auslesen der nächsten Zeile
|
|
|
|
// Setzen der Labels mit den jeweiligen Inhalten:
|
|
// scores[i] = new JLabel(Integer.toString(rs.getInt("Score")));
|
|
// names[i] = new JLabel(rs.getString("Name"));
|
|
// gameNr[i] = new JLabel(Integer.toString(rs.getInt("SpielNr")));
|
|
|
|
scores[i] = new JLabel(Integer.toString(i));
|
|
names[i] = new JLabel(Integer.toString(i));
|
|
gameNr[i] = new JLabel(Integer.toString(i));
|
|
|
|
scores[i].setBounds(300, 120 + i * 20, 150, 20); //
|
|
names[i].setBounds(150, 120 + i * 20, 150, 20); // Poition(und Grösse) des Panels der Top Scores
|
|
gameNr[i].setBounds(0, 120 + i * 20, 150, 20); // (mit Zeilenangabe im Fall von Fehlern)
|
|
|
|
// Hinzufügen der jeweiligen Labels:
|
|
panel.add(scores[i]);
|
|
panel.add(names[i]);
|
|
panel.add(gameNr[i]);
|
|
|
|
System.out.println(i);
|
|
|
|
} catch (Exception e) {
|
|
System.out.println("Fehler: " + e); // Falls etwas schief läuft
|
|
}
|
|
}
|
|
|
|
// Hinzufügen von 'info', 'eingabe', und 'enter' zum panel
|
|
panel.add(info);
|
|
panel.add(eingabe);
|
|
panel.add(enter);
|
|
|
|
|
|
|
|
// Setzen der Positionen und Größen von 'eingabe', 'enter', und 'info'
|
|
eingabe.setBounds(50, 50, 250, 20);
|
|
enter.setBounds(50, 80, 100, 30);
|
|
info.setBounds(5, 5, 400, 20);
|
|
|
|
// Hinzufügen des Action Listeners zu 'eingabe'
|
|
enter.addActionListener(new ActionListener() {
|
|
public void actionPerformed(ActionEvent evt) {
|
|
try {
|
|
button_ActionPerformed(evt);
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
});
|
|
|
|
}
|
|
|
|
public void button_ActionPerformed(ActionEvent evt) throws SQLException { // Was passieren soll, wenn der Button
|
|
// gedrückt wird
|
|
//datenbank.updateDatabase("INSERT INTO `highscore` (`Score`, `Name`, `SpielNr`) VALUES ('" + score + "', '"
|
|
// + eingabe.getText() + "','" + spielNr + "')"); // Einfügen der Daten in die Datenbank
|
|
this.dispose(); // Der Frame wird geschlossen
|
|
//datenbank.disconnect(); // Die Verbindung zur Datenbank wird getrennt
|
|
}
|
|
|
|
}
|