/
ledart
/
RRP_LedNik
Обзор
Документация
Войти
/
ledart
/
RRP_LedNik
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
develop
client/UI/CreateRoomScreen.java
124 строки
5 KB
Darya
Обновлён UI: улучшена отрисовка змеек, добавлена сетка, отображение имён игроков и счётчика змей
15 дек 2025, 21:33
15 дек 2025, 21:33
c60aa06
Код
Авторство
О чём код?
package client.UI; import javafx.application.Platform; import javafx.geometry.Insets; import javafx.scene.Scene; import javafx.scene.control.*; import javafx.scene.layout.VBox; import javafx.stage.Stage; import client.Network; public class CreateRoomScreen { private Network network; private Stage stage; private LobbyScreen lobbyScreen; public CreateRoomScreen(Network network, Stage stage, LobbyScreen lobbyScreen) { this.network = network; this.stage = stage; this.lobbyScreen = lobbyScreen; } public void start() { VBox root = new VBox(10); root.setPadding(new Insets(20)); Label label = new Label("Create New Room"); label.setStyle("-fx-font-size: 14px; -fx-font-weight: bold;"); Label instruction = new Label("Enter a unique room name:"); TextField roomField = new TextField(); roomField.setPromptText("Room name (e.g., MyRoom)"); Label statusLabel = new Label(""); Button createButton = new Button("Create Room"); Button cancelButton = new Button("Cancel"); createButton.setOnAction(e -> { String roomName = roomField.getText().trim(); if (roomName.isEmpty()) { statusLabel.setText("Room name cannot be empty!"); statusLabel.setStyle("-fx-text-fill: red;"); return; } if (roomName.length() > 20) { statusLabel.setText("Room name too long (max 20 chars)!"); statusLabel.setStyle("-fx-text-fill: red;"); return; } // Отключаем кнопку createButton.setDisable(true); statusLabel.setText("Creating room '" + roomName + "'..."); statusLabel.setStyle("-fx-text-fill: blue;"); // Настраиваем временный обработчик для создания комнаты network.setOnMessageCallback(msg -> { Platform.runLater(() -> { System.out.println("[CreateRoomScreen] Callback: " + msg); if (msg.startsWith("CREATE_ROOM_OK:")) { String createdRoomName = msg.substring(15); statusLabel.setText("Room '" + createdRoomName + "' created!"); statusLabel.setStyle("-fx-text-fill: green;"); System.out.println("[CreateRoomScreen] Server auto-joined us to room"); // Обновляем лобби if (lobbyScreen != null) { lobbyScreen.addRoom(createdRoomName); } // Переходим в комнату через 1 секунду new Thread(() -> { try { Thread.sleep(1000); } catch (InterruptedException ignored) {} Platform.runLater(() -> { RoomScreen roomScreen = new RoomScreen(network, stage, createdRoomName, lobbyScreen); roomScreen.start(); }); }).start(); } else if (msg.startsWith("ERROR:")) { String error = msg.substring(6); statusLabel.setText("Error: " + error); statusLabel.setStyle("-fx-text-fill: red;"); createButton.setDisable(false); Alert alert = new Alert(Alert.AlertType.ERROR); alert.setTitle("Create Room Error"); alert.setHeaderText("Cannot create room"); alert.setContentText(error); alert.show(); } }); }); // Отправляем запрос на создание комнаты System.out.println("[CreateRoomScreen] Creating room: " + roomName); network.sendMessage("CREATE_ROOM:" + roomName); }); cancelButton.setOnAction(e -> { // Возвращаемся в лобби if (lobbyScreen != null) { // Восстанавливаем обработчик лобби lobbyScreen.start(); } }); VBox buttonBox = new VBox(5, createButton, cancelButton); root.getChildren().addAll(label, instruction, roomField, statusLabel, buttonBox); Scene scene = new Scene(root, 300, 250); stage.setScene(scene); stage.setTitle("Create Room"); stage.show(); } }