No Description
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

ClientWindow.java 4.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. package chat;
  2. import java.net.*;
  3. import javax.swing.*;
  4. import java.awt.*;
  5. import java.awt.event.*;
  6. import java.io.*;
  7. import java.util.*;
  8. import chat.User;
  9. public class ClientWindow implements ActionListener {
  10. JFrame chatWindow;
  11. JPanel chatPanel;
  12. JTextArea chatText;
  13. JTextArea knownUsersPanel;
  14. JScrollPane textScroll;
  15. JPanel sendPanel;
  16. JTextField messageField;
  17. JButton sendButton;
  18. NetworkClient network;
  19. ClientWindow()
  20. {
  21. Boolean connected = false;
  22. Boolean outdoor = false;
  23. Boolean exit = false;
  24. String username = "";
  25. String destinationIP = "";
  26. chatWindow = new JFrame("Système de clavardage 2.0.1");
  27. chatPanel = new JPanel(new BorderLayout(2, 2));
  28. chatText = new JTextArea(1,1);
  29. knownUsersPanel = new JTextArea(1,1);
  30. textScroll = new JScrollPane(chatText);
  31. sendPanel = new JPanel(new BorderLayout(1, 2));
  32. messageField = new JTextField();
  33. sendButton = new JButton("Envoyer");
  34. network = new NetworkClient(chatText, knownUsersPanel);
  35. while(!connected && !exit)
  36. {
  37. Object[] options = {"Connect as indoor user", "Connect as outdoor user"};
  38. int n = JOptionPane.showOptionDialog(chatWindow, "", "Choose Login Method", JOptionPane.YES_NO_OPTION, JOptionPane.PLAIN_MESSAGE, null, options, options[0]);
  39. if(n == JOptionPane.YES_OPTION)
  40. {
  41. outdoor = false;
  42. destinationIP = "192.168.1.255";
  43. }
  44. else if (n == JOptionPane.NO_OPTION)
  45. {
  46. outdoor = true;
  47. destinationIP = JOptionPane.showInputDialog(chatWindow,
  48. "Enter the server's IP address",
  49. "Enter Server Address",
  50. JOptionPane.PLAIN_MESSAGE);
  51. }
  52. else
  53. {
  54. exit = true;
  55. }
  56. if((!outdoor || (destinationIP != null)) && !exit)
  57. {
  58. username = JOptionPane.showInputDialog(chatWindow,
  59. "Enter a username",
  60. "Choose Username",
  61. JOptionPane.PLAIN_MESSAGE);
  62. connected = network.connect(username, outdoor, destinationIP);
  63. if(!connected && username != null)
  64. {
  65. if(username.equals("") || username.contains(" ") || username.contains(";"))
  66. JOptionPane.showMessageDialog(chatWindow, "Please enter a valid username", "Error", JOptionPane.ERROR_MESSAGE);
  67. else
  68. JOptionPane.showMessageDialog(chatWindow, "This username is already taken", "Error", JOptionPane.ERROR_MESSAGE);
  69. }
  70. }
  71. }
  72. if(username != null && !exit)
  73. {
  74. sendButton.addActionListener(this);
  75. messageField.addActionListener(this);
  76. chatWindow.addWindowListener(new WindowAdapter() {
  77. public void windowClosing(WindowEvent e) {
  78. network.disconnect();
  79. }
  80. });
  81. sendPanel.add(messageField);
  82. sendPanel.add(sendButton, BorderLayout.EAST);
  83. chatWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  84. chatText.setLineWrap(true);
  85. chatText.setEditable(false);
  86. knownUsersPanel.setLineWrap(false);
  87. knownUsersPanel.setEditable(false);
  88. chatPanel.add(textScroll);
  89. chatPanel.add(knownUsersPanel, BorderLayout.EAST);
  90. chatPanel.add(sendPanel, BorderLayout.SOUTH);
  91. chatWindow.getContentPane().add(chatPanel, BorderLayout.CENTER);
  92. //Display the window.
  93. chatWindow.pack();
  94. chatWindow.setVisible(true);
  95. chatWindow.setSize(new Dimension(1024, 768));
  96. }
  97. }
  98. public static void main (String [] args)
  99. {
  100. JFrame.setDefaultLookAndFeelDecorated(true);
  101. ClientWindow window = new ClientWindow();
  102. }
  103. public void actionPerformed(ActionEvent event) {
  104. String message = messageField.getText();
  105. if("".compareTo(message) != 0)
  106. {
  107. messageField.setText("");
  108. network.send(new Message(network.getUser(), message, false));
  109. }
  110. }
  111. }