package fr.univ.lyon1.gui; import fr.univ.lyon1.gui.handlers.MainHandler; import javafx.application.Platform; import javafx.event.ActionEvent; import javafx.scene.Parent; import javafx.scene.control.Button; import javafx.scene.control.ScrollPane; import javafx.scene.control.TextArea; import javafx.scene.input.KeyCode; import javafx.scene.input.KeyEvent; import javafx.scene.text.Text; import javafx.scene.text.TextFlow; public class ClientPanel extends Parent { private final TextArea textToSend = new TextArea(); private final TextFlow receivedText = new TextFlow(); private final MainHandler gui; public ClientPanel(MainHandler gui) { this.gui = gui; ScrollPane scrollReceivedText = new ScrollPane(); scrollReceivedText.setLayoutX(20); scrollReceivedText.setLayoutY(20); scrollReceivedText.setPrefWidth(400); scrollReceivedText.setPrefHeight(350); scrollReceivedText.setContent(receivedText); scrollReceivedText.vvalueProperty().bind(receivedText.heightProperty()); this.getChildren().add(scrollReceivedText); Button sendBtn = new Button(); sendBtn.setPrefWidth(80); int btnMargin = 20; textToSend.setLayoutX(scrollReceivedText.getLayoutX()); textToSend.setLayoutY(scrollReceivedText.getLayoutY() + scrollReceivedText.getPrefHeight() + 20); textToSend.setPrefWidth(400- sendBtn.getPrefWidth()-btnMargin); textToSend.setPrefHeight(100); this.getChildren().add(textToSend); textToSend.setOnKeyPressed(this::textToSendKeyPressed); sendBtn.setText("Send"); sendBtn.setLayoutX(textToSend.getLayoutX() + textToSend.getPrefWidth() + btnMargin); sendBtn.setLayoutY(textToSend.getLayoutY()); sendBtn.setPrefWidth(80); sendBtn.setPrefHeight(40); sendBtn.setVisible(true); this.getChildren().add(sendBtn); sendBtn.setOnAction(this::sendBtnAction); Button clearBtn = new Button(); clearBtn.setText("Clear"); clearBtn.setLayoutX(sendBtn.getLayoutX()); clearBtn.setPrefWidth(sendBtn.getPrefWidth()); clearBtn.setPrefHeight(sendBtn.getPrefHeight()); clearBtn.setLayoutY(textToSend.getLayoutY() + textToSend.getPrefHeight() - clearBtn.getPrefHeight()); clearBtn.setVisible(true); this.getChildren().add(clearBtn); clearBtn.setOnAction(this::clearBtnAction); } private void send() { String msg = textToSend.getText(); gui.sendMessage(msg); textToSend.clear(); addMessage(msg); } private void sendBtnAction(ActionEvent e) { send(); } private void textToSendKeyPressed(KeyEvent e) { if (e.getCode() == KeyCode.ENTER) send(); } private void clearBtnAction(ActionEvent e) { textToSend.clear(); } public void addMessage(String message) { Platform.runLater(() -> receivedText.getChildren().add(new Text(message+"\n"))); } }