a10c23dc1ae764d0f0dc981a12773c3f0d77c900
[TD_SR.git] / TD2 / IHM / IHM.java
1 import java.awt.BorderLayout;
2 import java.awt.event.ActionEvent;
3 import java.awt.event.ActionListener;
4 import java.util.ArrayList;
5
6 import javax.swing.BoxLayout;
7 import javax.swing.JButton;
8 import javax.swing.JFrame;
9 import javax.swing.JPanel;
10 import javax.swing.JScrollPane;
11 import javax.swing.JTextArea;
12 import javax.swing.JTextField;
13 import javax.swing.ScrollPaneConstants;
14
15 import java.util.Random;
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 */
27 public class IHM implements ActionListener {
28
29 private JTextArea entrants;
30 private JTextField sortants;
31 private ArrayList<String> sendMessages;
32 //FIXME: use a random name by thread for now, should be setable
33 private String randName;
34
35 IHM() {
36 sendMessages = new ArrayList<String>();
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;
54 }
55
56 public void go() {
57 JFrame cadre = new JFrame("Client de discussion de " + randName);
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
87 synchronized public String getNextMessageToSend() {
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);
97 System.out.println("IHM -> message a envoyer : " + mess);
98 return randName + "> " + mess;
99 }
100
101 public void writeMessage(String mess) {
102 System.out.println("IHM -> message a ecrire : " + mess);
103 entrants.append(mess + "\n");
104 }
105
106 } // fin classe SimpleClientDiscussion