Implement UI

main
Obai Albek 2025-09-14 02:42:09 +02:00
parent 9482632faf
commit 3a1414187b
5 changed files with 165 additions and 80 deletions

View File

@ -1,14 +1,16 @@
package app;
import java.util.List;
import domain.*;
import fassade.ChatService;
import ui.Chat;
public class Main {
public static void main(String[] args) {
ChatService service = new ChatService();
// Zwei Fenster erstellen
Chat omarChat = new Chat("Omar", "Obai", service, 550, 100);
Chat obaiChat = new Chat("Obai", "Omar", service, 100, 100);
}
}

View File

@ -1,21 +1,41 @@
package domain;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class Message {
private User sender;
private String content;
private LocalDateTime timestamp;
//private MessageType type;
private MessageType type;
private static final DateTimeFormatter TIME_FORMATTER =
DateTimeFormatter.ofPattern("HH:mm");
public Message(User sender, String content) {
super();
this.sender = sender;
this.content = content;
this.timestamp = LocalDateTime.now();
this.type = MessageType.TEXT;
}
public Message(User sender, String content, MessageType type) {
this(sender, content);
this.type = type;
}
public String toTimeString() {
return String.format("[%s] %s: %s",
timestamp.format(TIME_FORMATTER),
sender.getUsername(),
content);
}
@Override
public String toString() {
return toTimeString();
}
public User getSender() {
return sender;
@ -41,15 +61,11 @@ public class Message {
this.timestamp = timestamp;
}
@Override
public String toString() {
return "Message [sender=" + sender.getUsername() + ", content=" + content + ", timestamp="
+ timestamp + "]";
public MessageType getType() {
return type;
}
public void setType(MessageType type) {
this.type = type;
}
}

View File

@ -1,5 +1,9 @@
package domain;
public enum MessageType {
TEXT,LINK;
TEXT,
IMAGE,
FILE,
LINK,
SYSTEM
}

View File

@ -1,5 +1,6 @@
package fassade;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@ -18,21 +19,20 @@ public class ChatService {
usersById = new HashMap<>();
}
public boolean createUser(String userName) {
public void createUser(String userName) {
if (users.containsKey(userName))
throw new IllegalArgumentException("User existiert bereits: " + userName);
User tempUser = new User(userName);
users.put(userName, tempUser);
usersById.put(tempUser.getUserId(), tempUser);
return true;
}
public User getUser(String userName) {
private User getUser(String userName) {
return users.get(userName);
}
public User getUser(int userId) {
private User getUser(int userId) {
return usersById.get(userId);
}
@ -43,11 +43,10 @@ public class ChatService {
if (user1 == null || user2 == null)
throw new IllegalArgumentException("User existiert nicht");
// Prüfen ob Chat bereits existiert
for (ChatRoom room : chatrooms.values()) {
if ((room.getUser1().equals(user1) && room.getUser2().equals(user2)) ||
(room.getUser1().equals(user2) && room.getUser2().equals(user1))) {
return room.getRoomId(); // Existierenden Chat zurückgeben
return room.getRoomId();
}
}
@ -78,7 +77,7 @@ public class ChatService {
room.addMessage(message);
}
public List<String> showMessages(int roomId) {
public List<String> showMessage(int roomId) {
ChatRoom room = chatrooms.get(roomId);
if (room == null)
throw new IllegalArgumentException("Chatroom existiert nicht: " + roomId);
@ -186,9 +185,9 @@ public class ChatService {
public String getGruppenRoomInfo(int groupId) {
GruppenRoom room = gruppenRooms.get(groupId);
if (room == null) {
if (room == null)
throw new IllegalArgumentException("Gruppenraum existiert nicht: " + groupId);
}
return room.toString();
}

View File

@ -1,25 +1,89 @@
package ui;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import fassade.ChatService;
public class Chat extends JFrame {
private ChatService service;
private String username;
private int roomId;
private static final long serialVersionUID = 1L;
private JPanel contentPane;
private JTextArea chatArea;
private JTextField messageField;
private JButton sendButton;
public Chat(String username, String otherUser, ChatService service, int x, int y) {
this.service = service;
this.username = username;
public Chat() {
// User erstellen
service.createUser(username);
service.createUser(otherUser);
// Chatroom erstellen
this.roomId = service.createChatRoom(username, otherUser);
setupGUI();
setLocation(x, y);
setVisible(true);
}
private void setupGUI() {
setTitle("Chat - " + username);
setSize(400, 500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 650, 410);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
setLayout(new BorderLayout());
// Chat-Anzeige
chatArea = new JTextArea();
chatArea.setEditable(false);
JScrollPane scrollPane = new JScrollPane(chatArea);
add(scrollPane, BorderLayout.CENTER);
// Eingabe-Bereich
JPanel inputPanel = new JPanel(new BorderLayout());
messageField = new JTextField();
sendButton = new JButton("Senden");
// Send-Button Action
sendButton.addActionListener(e -> sendMessage());
// Enter-Taste zum Senden
messageField.addActionListener(e -> sendMessage());
inputPanel.add(messageField, BorderLayout.CENTER);
inputPanel.add(sendButton, BorderLayout.EAST);
inputPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
add(inputPanel, BorderLayout.SOUTH);
// Initiale Nachricht
chatArea.append("Chat gestartet mit " + username + "\n");
}
private void sendMessage() {
String message = messageField.getText().trim();
if (!message.isEmpty()) {
try {
service.sendMessage(roomId, username, message);
messageField.setText("");
refreshChat();
} catch (Exception e) {
JOptionPane.showMessageDialog(this, "Fehler: " + e.getMessage());
}
}
}
private void refreshChat() {
try {
chatArea.setText("");
for (String message : service.showMessage(roomId)) {
chatArea.append(message + "\n");
}
} catch (Exception e) {
chatArea.append("Fehler beim Laden: " + e.getMessage() + "\n");
}
}
}