TD2: Ensure chat clients will not send empty message.
[TD_SR.git] / TD2 / IHM / IHM.java
CommitLineData
15850b4c
JB
1import java.awt.BorderLayout;
2import java.awt.event.ActionEvent;
3import java.awt.event.ActionListener;
4import java.util.ArrayList;
5
6import javax.swing.BoxLayout;
7import javax.swing.JButton;
8import javax.swing.JFrame;
9import javax.swing.JPanel;
10import javax.swing.JScrollPane;
11import javax.swing.JTextArea;
12import javax.swing.JTextField;
13import javax.swing.ScrollPaneConstants;
14
92d3f605 15import java.util.Random;
15850b4c
JB
16
17/**
18 * Applications réparties
19 * TP 1
20 * Chat, Sockets
21 *
22 * IHM pour l'application cliente
23 *
24 * @author Toto
25 * @version 1.0
26 */
27public class IHM implements ActionListener {
28
29 private JTextArea entrants;
30 private JTextField sortants;
31 private ArrayList<String> sendMessages;
92d3f605
JB
32 //FIXME: use a random name by thread for now, should be setable
33 private String randName;
15850b4c
JB
34
35 IHM() {
36 sendMessages = new ArrayList<String>();
92d3f605
JB
37 randName = randomName();
38 }
39
40 private String randomName() {
41
42 int leftLimit = 97; // letter 'a'
43 int rightLimit = 122; // letter 'z'
44 int targetStringLength = 8;
45 Random random = new Random();
46 StringBuilder buffer = new StringBuilder(targetStringLength);
47 for (int i = 0; i < targetStringLength; i++) {
48 int randomLimitedInt = leftLimit + (int)(random.nextFloat() * (rightLimit - leftLimit + 1));
49 buffer.append((char)randomLimitedInt);
50 }
51 String generatedString = buffer.toString();
52
53 return generatedString;
15850b4c
JB
54 }
55
56 public void go() {
92d3f605 57 JFrame cadre = new JFrame("Client de discussion de " + randName);
15850b4c
JB
58 JPanel panneau = new JPanel();
59 entrants = new JTextArea(15, 30);
60 entrants.setLineWrap(true);
61 entrants.setWrapStyleWord(true);
62 entrants.setEditable(false);
63 JScrollPane zoneTexte = new JScrollPane(entrants);
64 zoneTexte.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
65 zoneTexte.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
66 sortants = new JTextField(24);
67 JButton boutonEnvoi = new JButton("Envoi");
68 boutonEnvoi.addActionListener(this);
69 panneau.add(zoneTexte);
70 panneau.add(sortants);
71 panneau.add(boutonEnvoi);
72 cadre.getContentPane().add(BorderLayout.CENTER, panneau);
73 cadre.setSize(400, 310);
74 cadre.setVisible(true);
75
76 panneau.setLayout(new BoxLayout(panneau, BoxLayout.Y_AXIS));
77 cadre.pack();
78 } // fin methode go
79
80 synchronized public void actionPerformed(ActionEvent ev) {
81 sendMessages.add(sortants.getText());
82 sortants.setText("");
83 sortants.requestFocus();
84 this.notify();
85 }
86
ef87f1a8 87 synchronized public String getNextMessageToSend() {
15850b4c
JB
88 try {
89 if (sendMessages.isEmpty())
90 this.wait();
91 }
92 catch (Exception e) {
93 System.err.println("Exception : " + e);
94 e.printStackTrace();
95 }
96 String mess = (String)sendMessages.remove(0);
73a5e231
JB
97 if (mess.length() == 0)
98 return "";
ef87f1a8 99 System.out.println("IHM -> message a envoyer : " + mess);
92d3f605 100 return randName + "> " + mess;
15850b4c
JB
101 }
102
ef87f1a8
JB
103 public void writeMessage(String mess) {
104 System.out.println("IHM -> message a ecrire : " + mess);
15850b4c
JB
105 entrants.append(mess + "\n");
106 }
107
15850b4c 108} // fin classe SimpleClientDiscussion