From d3c1e1ac535d96a586dffccee45844b8f45b34ad Mon Sep 17 00:00:00 2001 From: Metatheria Date: Thu, 7 Jan 2021 18:48:21 +0100 Subject: [PATCH] =?UTF-8?q?ajout=20d'un=20panel=20avec=20la=20liste=20des?= =?UTF-8?q?=20utilisateurs=20connect=C3=A9s=20dans=20la=20fen=C3=AAtre=20p?= =?UTF-8?q?rincipale?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/chat/ClientWindow.java | 12 +++++++++--- src/chat/NetworkClient.java | 38 ++++++++++++++++++++++++++++++++----- src/chat/User.java | 8 ++++++-- 3 files changed, 48 insertions(+), 10 deletions(-) diff --git a/src/chat/ClientWindow.java b/src/chat/ClientWindow.java index 585736c..cf034eb 100644 --- a/src/chat/ClientWindow.java +++ b/src/chat/ClientWindow.java @@ -19,6 +19,7 @@ public class ClientWindow implements ActionListener { JPanel chatPanel; JTextArea chatText; + JTextArea knownUsersPanel; JScrollPane textScroll; JPanel sendPanel; @@ -36,13 +37,14 @@ public class ClientWindow implements ActionListener { chatWindow = new JFrame("Système de clavardage 2.0.1"); chatPanel = new JPanel(new BorderLayout(2, 2)); chatText = new JTextArea(1,1); + knownUsersPanel = new JTextArea(1,1); textScroll = new JScrollPane(chatText); sendPanel = new JPanel(new BorderLayout(1, 2)); messageField = new JTextField(); sendButton = new JButton("Envoyer"); - network = new NetworkClient(chatText); + network = new NetworkClient(chatText, knownUsersPanel); while(!connected && username != null) { @@ -52,11 +54,11 @@ public class ClientWindow implements ActionListener { JOptionPane.PLAIN_MESSAGE); connected = network.connect(username); - if(!connected) + if(!connected && username != null) { if(username.equals("")) JOptionPane.showMessageDialog(chatWindow, "Please enter a username", "Error", JOptionPane.ERROR_MESSAGE); - else if (username != null) + else JOptionPane.showMessageDialog(chatWindow, "This username is already taken", "Error", JOptionPane.ERROR_MESSAGE); } } @@ -80,7 +82,11 @@ public class ClientWindow implements ActionListener { chatText.setLineWrap(true); chatText.setEditable(false); + knownUsersPanel.setLineWrap(false); + knownUsersPanel.setEditable(false); + chatPanel.add(textScroll); + chatPanel.add(knownUsersPanel, BorderLayout.EAST); chatPanel.add(sendPanel, BorderLayout.SOUTH); chatWindow.getContentPane().add(chatPanel, BorderLayout.CENTER); diff --git a/src/chat/NetworkClient.java b/src/chat/NetworkClient.java index d4e4283..0e63932 100644 --- a/src/chat/NetworkClient.java +++ b/src/chat/NetworkClient.java @@ -54,12 +54,14 @@ class ReceiveThread extends Thread { int port; JTextArea displayArea; + JTextArea knownUsersPanel; List known_users; - ReceiveThread(int in_port, JTextArea in_displayArea, List in_known_users) + ReceiveThread(int in_port, JTextArea in_displayArea, List in_known_users, JTextArea in_knownUsersPanel) { port = in_port; displayArea = in_displayArea; + knownUsersPanel = in_knownUsersPanel; known_users = in_known_users; } public void run() @@ -88,6 +90,12 @@ class ReceiveThread extends Thread { if (known_users.get(i).getName().equals(message.getAuthor())) known_users.remove(i); } + knownUsersPanel.setText(""); + knownUsersPanel.append("Online:\n"); + for(User a:known_users) + { + knownUsersPanel.append(a.getName() + "\n"); + } } displayArea.setCaretPosition(displayArea.getDocument().getLength()); link.close(); @@ -108,12 +116,14 @@ class ReceiveThread extends Thread { class ConnectionListenerThread extends Thread { JTextArea displayArea; + JTextArea knownUsersPanel; List known_users; - ConnectionListenerThread(List in_known_users, JTextArea in_displayArea) + ConnectionListenerThread(List in_known_users, JTextArea in_displayArea, JTextArea in_knownUsersPanel) { known_users = in_known_users; displayArea = in_displayArea; + knownUsersPanel = in_knownUsersPanel; } public void run() { @@ -168,8 +178,17 @@ class ConnectionListenerThread extends Thread { if(accepted) { known_users.add(new User(username, clientAddress.getHostAddress())); + + Collections.sort(known_users); + displayArea.append(username + " has joined the chat.\n"); displayArea.setCaretPosition(displayArea.getDocument().getLength()); + knownUsersPanel.setText(""); + knownUsersPanel.append("Online:\n"); + for(User a:known_users) + { + knownUsersPanel.append(a.getName() + "\n"); + } } else { @@ -191,6 +210,7 @@ public class NetworkClient { private User user; private List known_users; private JTextArea chatText; + private JTextArea knownUsersPanel; static String getLocalIP() { String ip = ""; @@ -205,10 +225,11 @@ public class NetworkClient { return ip; } - NetworkClient(JTextArea in_chatText) + NetworkClient(JTextArea in_chatText, JTextArea in_knownUsersPanel) { user = new User("", ""); chatText = in_chatText; + knownUsersPanel = in_knownUsersPanel; known_users = new ArrayList(); } @@ -297,9 +318,16 @@ public class NetworkClient { chatText.append(username + " has joined the chat.\n"); chatText.setCaretPosition(chatText.getDocument().getLength()); - ReceiveThread t2 = new ReceiveThread(1237, chatText, known_users); + knownUsersPanel.setText(""); + knownUsersPanel.append(" Online :\n"); + for(User a:known_users) + { + knownUsersPanel.append(" " + a.getName() + " \n"); + } + + ReceiveThread t2 = new ReceiveThread(1237, chatText, known_users, knownUsersPanel); - ConnectionListenerThread t3 = new ConnectionListenerThread(known_users, chatText); + ConnectionListenerThread t3 = new ConnectionListenerThread(known_users, chatText, knownUsersPanel); t2.start(); t3.start(); } diff --git a/src/chat/User.java b/src/chat/User.java index 35eda11..c0188df 100644 --- a/src/chat/User.java +++ b/src/chat/User.java @@ -3,7 +3,7 @@ package chat; import java.io.*; import java.util.*; -public class User implements Serializable{ +public class User implements Comparable, Serializable{ private String name; private String address; @@ -37,4 +37,8 @@ public class User implements Serializable{ return (b.getName() == name); } -} + public int compareTo (User otherUser) + { + return name.compareTo(otherUser.getName()); + } +} \ No newline at end of file