1 import java
.awt
.BorderLayout
;
2 import java
.awt
.event
.ActionEvent
;
3 import java
.awt
.event
.ActionListener
;
4 import java
.util
.ArrayList
;
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
;
15 import java
.util
.Random
;
18 * Applications réparties
22 * IHM pour l'application cliente
27 public class IHM
implements ActionListener
{
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
;
36 sendMessages
= new ArrayList
<String
>();
37 randName
= randomName();
40 private String
randomName() {
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
);
51 String generatedString
= buffer
.toString();
53 return generatedString
;
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);
76 panneau
.setLayout(new BoxLayout(panneau
, BoxLayout
.Y_AXIS
));
80 synchronized public void actionPerformed(ActionEvent ev
) {
81 sendMessages
.add(sortants
.getText());
83 sortants
.requestFocus();
87 synchronized public String
getNextMessageToSend() {
89 if (sendMessages
.isEmpty())
93 System
.err
.println("Exception : " + e
);
96 String mess
= (String
)sendMessages
.remove(0);
97 System
.out
.println("IHM -> message a envoyer : " + mess
);
98 return randName
+ "> " + mess
;
101 public void writeMessage(String mess
) {
102 System
.out
.println("IHM -> message a ecrire : " + mess
);
103 entrants
.append(mess
+ "\n");
106 } // fin classe SimpleClientDiscussion