// 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 } }