import java.awt.*; import javax.swing.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.IOException; import java.net.InetSocketAddress; /** * Das JoinGame Panel dient zum setzten des Ports/IP-Adresse. * Anschließend kann das Verbinden Panel gezeigt werden. * 51525 * ssh.lgc.sh */ public class JoinGame extends JPanel { // Grafiken ImageIcon backButtonIcon = new ImageIcon("graphics/backButton.png"); // Labels JLabel spielBeitretenLabel; JLabel ipLabel = new JLabel("IP-Adresse"); JLabel portLabel = new JLabel("Port"); // Textfelder JTextField ipTextField = new JTextField(20); JTextField portTextField = new JTextField(20); // Buttons JButton losButton = new JButton("Los!"); JButton backButton = new JButton(backButtonIcon); // Font Font robotoFont = new Font("Roboto", Font.BOLD, 45); /** * Erstellt mittels Funktionsaufrufen das Panel. * @param frame Der Mainframe der Anwendung über den alle Panels angezeigt werden. * @param g int-Anzeige, ob es sich um "spiel erstellen" oder "spiel beitreten" handelt. * @param playerType int-Anzeige, ob es sich um einen HumanPlayer,AIEasy... handelt. * @param playerName Name des Spielers */ public JoinGame(MainFrame frame,int g,int playerType,String playerName) { setLayout(null); buildPanel(frame,g,playerType,playerName); } /** * Erstellt das Panel. * @param frame Der Mainframe der Anwendung über den alle Panels angezeigt werden. * @param g int-Anzeige, ob es sich um "spiel erstellen" oder "spiel beitreten" handelt. * @param playerType int-Anzeige, ob es sich um einen HumanPlayer,AIEasy... handelt. * @param playerName Name des Spielers */ private void buildPanel(MainFrame frame,int g,int playerType,String playerName) { if(g==1){ spielBeitretenLabel= new JLabel("Spiel beitreten"); }else{ spielBeitretenLabel= new JLabel("Spiel erstellen"); } spielBeitretenLabel.setBounds(20,20,700, 100); losButton.setBounds(320, 225, 100, 50); backButton.setBounds(1380, 20, 80, 80); portLabel.setBounds(50, 200, 200, 30); if(g==1) { //Wenn man Spiel erstellen will werden IP-Felder nicht angezeigt. ipLabel.setBounds(50, 125, 200, 30); ipTextField.setBounds(50, 150, 250, 50); } portTextField.setBounds(50, 225, 250, 50); spielBeitretenLabel.setFont(robotoFont.deriveFont(50f)); add(spielBeitretenLabel); add(ipLabel); add(portLabel); add(losButton); add(ipTextField); add(portTextField); add(backButton); // ActionListener für Buttons // Um in das MultiplayerGame zurückzuwechseln. backButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { frame.showPanel("MultiplayerGame"); } }); // Um das Verbinden Panel anzuzeigen und Daten an Backend weiterzureichen. losButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String ipAddress = ipTextField.getText(); if (ipAddress.isEmpty()) { ipAddress = "0.0.0.0"; } String portText = portTextField.getText(); int port = Integer.parseInt(portText); InetSocketAddress address = new InetSocketAddress(ipAddress, port); frame.showPanel("Verbinden"); try { if(playerType == 0) { GameController.startOnlineGame(HumanPlayer.class, playerName, address,GameController.semesterToBoardSize(2)); } else if(playerType == 1) { GameController.startOnlineGame(SpecificAiPlayerEasy.class, playerName, address,GameController.semesterToBoardSize(2)); } else if (playerType == 2) { GameController.startOnlineGame(SpecificAiPlayerMedium.class, playerName, address,GameController.semesterToBoardSize(2)); } else if (playerType == 3) { GameController.startOnlineGame(SpecificAiPlayerHard.class, playerName, address,GameController.semesterToBoardSize(2)); } } catch (IOException ex) { throw new RuntimeException(ex); } } }); } }