Skip to content

Commit bb0bbc7

Browse files
basic chat update
1 parent d7e405b commit bb0bbc7

File tree

3 files changed

+81
-19
lines changed

3 files changed

+81
-19
lines changed

src/main/java/com/example/HelloController.java

Lines changed: 55 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22

33
import javafx.event.ActionEvent;
44
import javafx.fxml.FXML;
5-
import javafx.scene.control.Label;
6-
import javafx.scene.control.ListView;
7-
import javafx.scene.control.TextField;
5+
import javafx.geometry.Pos;
6+
import javafx.geometry.Side;
7+
import javafx.scene.control.*;
88

99
/**
1010
* Controller layer: mediates between the view (FXML) and the model.
@@ -22,12 +22,64 @@ public class HelloController {
2222
@FXML
2323
private TextField messageField;
2424

25+
@FXML
26+
private Button emojiButton;
27+
28+
@FXML
29+
private void emojis() {
30+
31+
String[] emojis = {"😀", "😂", "😍", "😎", "😭", "👍", "🎉"};
32+
33+
34+
ContextMenu emojiMenu = new ContextMenu();
35+
for (String emoji : emojis) {
36+
MenuItem item = new MenuItem(emoji);
37+
item.setOnAction(e -> {
38+
messageField.appendText(emoji);
39+
});
40+
emojiMenu.getItems().add(item);
41+
}
42+
43+
emojiMenu.show(emojiButton, Side.BOTTOM, 0, 0);
44+
}
45+
2546
@FXML
2647
private void initialize() {
2748
messageLabel.setText(model.getGreeting());
2849
messageView.setItems(model.getMessages());
50+
messageView.setCellFactory(list -> new ListCell<>() {
51+
@Override
52+
protected void updateItem(NtfyMessageDto msg, boolean empty) {
53+
super.updateItem(msg, empty);
54+
55+
if (empty || msg == null) {
56+
setGraphic(null);
57+
return;
58+
}
59+
60+
Label label = new Label(msg.toString());
61+
label.setWrapText(true);
62+
label.setMaxWidth(180);
63+
64+
65+
boolean fromMe = msg.topic() != null && msg.topic().equals("me");
66+
67+
if (fromMe) {
68+
label.setStyle("-fx-background-color: lightgreen; -fx-padding: 6; -fx-background-radius: 8;");
69+
setAlignment(Pos.CENTER_RIGHT);
70+
} else {
71+
label.setStyle("-fx-background-color: lightgray; -fx-padding: 6; -fx-background-radius: 8;");
72+
setAlignment(Pos.CENTER_LEFT);
73+
}
74+
75+
setGraphic(label);
76+
}
77+
});
78+
2979
}
3080

81+
82+
3183
public void sendMessage(ActionEvent actionEvent) {
3284
String text = messageField.getText().trim();
3385
if (!text.isEmpty()) {

src/main/java/com/example/HelloModel.java

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,13 @@ public void sendMessage(String text) {
4848

4949
senderMe=true;
5050

51+
long now = System.currentTimeMillis() / 1000;
52+
NtfyMessageDto myMsg = new NtfyMessageDto("local", now, "message", "me", text);
53+
54+
Platform.runLater(() -> messages.add(myMsg));
55+
5156
HttpRequest httpRequest= HttpRequest.newBuilder()
52-
.POST(HttpRequest.BodyPublishers.ofString("Hello world"))
57+
.POST(HttpRequest.BodyPublishers.ofString(text))
5358
.uri(URI.create(hostName + "/mytopic"))
5459
.build();
5560
http.sendAsync(httpRequest, HttpResponse.BodyHandlers.discarding())
@@ -65,9 +70,10 @@ public void sendMessage(String text) {
6570
System.out.println("Interrupted sending request");
6671
}
6772

73+
6874
}
6975

70-
public void receiveMessage(){
76+
public void receiveMessage() {
7177
HttpRequest httpRequest = HttpRequest.newBuilder()
7278
.GET()
7379
.uri(URI.create(hostName + "/mytopic/json"))
@@ -85,13 +91,16 @@ public void receiveMessage(){
8591
})
8692
.filter(Objects::nonNull)
8793
.filter(msg -> "message".equals(msg.event()))
88-
.forEach(msg->{
89-
if (senderMe) {
90-
senderMe=false;
94+
.forEach(msg -> {
95+
96+
97+
if ("me".equals(msg.topic())) {
9198
return;
9299
}
93-
Platform.runLater(() -> messages.add(msg));
100+
101+
Platform.runLater(() -> messages.add(msg));
94102
}));
95103
}
96104

105+
97106
}

src/main/resources/com/example/hello-view.fxml

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,18 @@
55
<?import javafx.scene.layout.*?>
66

77
<VBox prefHeight="482.0" prefWidth="248.0" spacing="5.0" xmlns="http://javafx.com/javafx/17.0.12" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.example.HelloController">
8-
<Label fx:id="messageLabel" text="CHAT LAB3" />
9-
<ListView fx:id="messageView" prefHeight="373.0" prefWidth="248.0" VBox.vgrow="ALWAYS" />
8+
<Label fx:id="messageLabel" text="CHAT LAB3" />
9+
<ListView fx:id="messageView" prefHeight="373.0" prefWidth="248.0" VBox.vgrow="ALWAYS" />
1010

11-
<HBox spacing="10.0">
12-
<TextField fx:id="messageField" prefHeight="50.0" prefWidth="187.0" promptText="Type your message..." HBox.hgrow="ALWAYS">
13-
<HBox.margin>
14-
<Insets bottom="5.0" left="5.0" />
15-
</HBox.margin></TextField>
16-
<Button onAction="#sendMessage" prefHeight="34.0" prefWidth="51.0" text="Send">
17-
<HBox.margin>
11+
<HBox spacing="5.0">
12+
<Button fx:id="emojiButton" onAction="#emojis" prefHeight="25.0" prefWidth="34.0" text="😀" />
13+
<TextField fx:id="messageField" prefHeight="50.0" prefWidth="154.0" promptText="Type your message..." HBox.hgrow="ALWAYS">
14+
<HBox.margin>
15+
<Insets bottom="5.0" />
16+
</HBox.margin></TextField>
17+
<Button onAction="#sendMessage" prefHeight="34.0" prefWidth="43.0" text="Send">
18+
<HBox.margin>
1819
<Insets right="2.0" />
19-
</HBox.margin></Button>
20+
</HBox.margin></Button>
2021
</HBox>
2122
</VBox>

0 commit comments

Comments
 (0)