From 729c4ffbeada7c1b17070e98357b148b2c15bd8d Mon Sep 17 00:00:00 2001 From: Sandra Neljestam <229708855+SandraNelj@users.noreply.github.com> Date: Fri, 31 Oct 2025 10:03:31 +0100 Subject: [PATCH 1/8] =?UTF-8?q?Skapat=20kod=20f=C3=B6r=20att=20chatt-appen?= =?UTF-8?q?=20ska=20fungera.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/example/HelloController.java | 30 +++++++++- src/main/java/com/example/HelloFX.java | 2 +- src/main/java/com/example/HelloModel.java | 56 +++++++++++++++++-- .../resources/com/example/hello-view.fxml | 28 +++++++--- 4 files changed, 101 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/example/HelloController.java b/src/main/java/com/example/HelloController.java index fdd160a0..c525f32d 100644 --- a/src/main/java/com/example/HelloController.java +++ b/src/main/java/com/example/HelloController.java @@ -2,12 +2,22 @@ import javafx.fxml.FXML; import javafx.scene.control.Label; +import javafx.application.Platform; +import javafx.scene.control.Button; +import javafx.scene.control.TextArea; +import javafx.scene.control.TextField; + +import java.io.IOException; /** * Controller layer: mediates between the view (FXML) and the model. */ public class HelloController { + @FXML private TextArea chatArea; + @FXML private TextField inputField; + @FXML private Button sendButton; + private final HelloModel model = new HelloModel(); @FXML @@ -15,8 +25,24 @@ public class HelloController { @FXML private void initialize() { - if (messageLabel != null) { - messageLabel.setText(model.getGreeting()); + model.startListening(message -> Platform.runLater(() -> { + chatArea.appendText(message + "\n"); + })); + sendButton.setOnAction(e->sendMessage()); + } + @FXML + private void sendMessage() { + String msg = inputField.getText().trim(); + if (msg.isEmpty()) return; + + try { + chatArea.appendText("Du: " + msg + "\n"); + + model.sendMessage(msg); + inputField.clear(); + } catch (IOException e) { + e.printStackTrace(); } + } } diff --git a/src/main/java/com/example/HelloFX.java b/src/main/java/com/example/HelloFX.java index 96bdc5ca..6d8a4e40 100644 --- a/src/main/java/com/example/HelloFX.java +++ b/src/main/java/com/example/HelloFX.java @@ -13,7 +13,7 @@ public void start(Stage stage) throws Exception { FXMLLoader fxmlLoader = new FXMLLoader(HelloFX.class.getResource("hello-view.fxml")); Parent root = fxmlLoader.load(); Scene scene = new Scene(root, 640, 480); - stage.setTitle("Hello MVC"); + stage.setTitle("JavaFX Chat"); stage.setScene(scene); stage.show(); } diff --git a/src/main/java/com/example/HelloModel.java b/src/main/java/com/example/HelloModel.java index 385cfd10..97b886ca 100644 --- a/src/main/java/com/example/HelloModel.java +++ b/src/main/java/com/example/HelloModel.java @@ -1,5 +1,11 @@ package com.example; +import java.io.*; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + /** * Model layer: encapsulates application data and business logic. */ @@ -7,9 +13,51 @@ public class HelloModel { /** * Returns a greeting based on the current Java and JavaFX versions. */ - public String getGreeting() { - String javaVersion = System.getProperty("java.version"); - String javafxVersion = System.getProperty("javafx.version"); - return "Hello, JavaFX " + javafxVersion + ", running on Java " + javaVersion + "."; + + private final String topic = "javafx-demo"; + private final String baseUrl; + private final ExecutorService executor = Executors.newSingleThreadExecutor(); + + public interface MessageListener { + void onMessage(String message); + } + + public HelloModel() { + this.baseUrl = System.getenv().getOrDefault("NTFY_URL", "https://ntfy.sh"); + } + + public void sendMessage(String message) throws IOException { + URL url = new URL (baseUrl); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setDoOutput(true); + conn.setRequestMethod("POST"); + conn.setRequestProperty("Content-Type", "application/json"); + + String json = String.format("{\"topic\":\"%s\",\"message\":\"%s\"}",topic, message); + try (OutputStream os = conn.getOutputStream()) { + os.write(json.getBytes()); + } + + conn.getResponseCode(); + conn.disconnect(); } + public void startListening (MessageListener listener) { + executor.submit(()->{ + try { + URL url = new URL (baseUrl + "/" + topic + "/json"); + BufferedReader rader = new BufferedReader(new InputStreamReader(url.openStream())); + + String line; + while ((line = rader.readLine()) != null) { + if (line.contains("\"nessage\"")) { + String msg = line.replaceAll(".*\"message\":\"(.*?)\".*", "$1"); + listener.onMessage(msg); + } + } + } catch (IOException e) { + e.printStackTrace(); + } + }); + } + } diff --git a/src/main/resources/com/example/hello-view.fxml b/src/main/resources/com/example/hello-view.fxml index 20a7dc82..7ce62716 100644 --- a/src/main/resources/com/example/hello-view.fxml +++ b/src/main/resources/com/example/hello-view.fxml @@ -1,9 +1,21 @@ - - - - - - - + + + + + + + + + + +