PongMitDatenbank/src/GUI.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
}
}