Erori fixate, imbunatatiri threading, debug output optional.
[ChatApp.git] / ChatApp / PrimaPagina.java
blobc69ac6884c8fef70caea259d6a85ac1aafd72aee
1 /*
2 * © 2010 ROBO Design
3 * http://www.robodesign.ro
5 * $Date: 2010-05-19 18:35:24 +0300 $
6 */
8 package ChatApp;
10 import java.awt.Component;
11 import java.awt.Container;
12 import java.awt.Dimension;
13 import java.awt.GridBagConstraints;
14 import java.awt.GridBagLayout;
15 import java.awt.Insets;
16 import java.awt.event.ActionEvent;
17 import java.awt.event.ActionListener;
18 import javax.swing.JButton;
19 import javax.swing.JFrame;
20 import javax.swing.JLabel;
21 import javax.swing.JPanel;
22 import javax.swing.JSpinner;
23 import javax.swing.JTabbedPane;
24 import javax.swing.JTextField;
25 import javax.swing.SpinnerNumberModel;
26 import javax.swing.event.ChangeEvent;
27 import javax.swing.event.ChangeListener;
29 // Panoul principal, "prima pagina". Acesta permite utilizatorului:
30 // - sa porneasca serverul pentru a gazdui un chat,
31 // - sa se conecteze la un alt server, la un chat existent.
33 public class PrimaPagina extends JPanel implements ActionListener, ChangeListener {
34 private appMain myApp;
35 private JTabbedPane panouTaburi;
36 private JSpinner serverPortField;
37 private JSpinner clientPortField;
38 private final int portMin = 1024;
39 private final int portMax = 65535;
40 private JTextField serverNickField;
41 private JTextField clientNickField;
42 private JTextField serverAddressField;
43 private JButton btnConectareServer;
44 private JButton btnStartServer;
46 public PrimaPagina (appMain rootApp) {
47 super(new GridBagLayout());
49 GridBagConstraints c = new GridBagConstraints();
50 myApp = rootApp;
52 // taburile principale ale aplicatiei.
53 panouTaburi = new JTabbedPane();
54 panouTaburi.setName("taburiPrimaPagina");
55 panouTaburi.addTab("Conectare la server", panouConectareServer());
56 panouTaburi.addTab("Gazduire server", panouGazduireChat());
57 panouTaburi.addChangeListener(this);
59 c.fill = c.BOTH;
60 c.anchor = c.CENTER;
61 c.gridx = 0;
62 c.gridy = 0;
63 c.weightx = 1;
64 c.weighty = 1;
65 c.insets = new Insets(12, 12, 6, 12);
66 this.add(panouTaburi, c);
68 JButton btnIesire = new JButton("Iesire");
69 btnIesire.setToolTipText("Iesire din aplicatie.");
70 btnIesire.setActionCommand("iesireApp");
71 btnIesire.setDefaultCapable(false);
72 btnIesire.addActionListener(this);
74 c.fill = c.NONE;
75 c.anchor = c.EAST;
76 c.gridy = 1;
77 c.gridheight = c.RELATIVE;
78 c.weighty = 0;
79 c.insets = new Insets(6, 12, 12, 12);
80 this.add(btnIesire, c);
83 // initializarea interfetei
84 public void initializare () {
85 JFrame f = myApp.getMyFrame();
87 if (f.getContentPane() == ((Container) this)) {
88 return;
91 f.setContentPane((Container) this);
92 f.setTitle("ChatApp");
93 f.setSize(new Dimension(360, 310));
94 f.setMinimumSize(new Dimension(360, 310));
95 f.setPreferredSize(new Dimension(360, 310));
96 f.pack();
97 f.setLocationRelativeTo(null);
99 Component tab = panouTaburi.getSelectedComponent();
101 if (tab.getName().equals("conectareServer")) {
102 myApp.getRootPane().setDefaultButton(btnConectareServer);
103 clientNickField.requestFocusInWindow();
104 } else if (tab.getName().equals("gazduireChat")) {
105 myApp.getRootPane().setDefaultButton(btnStartServer);
106 serverNickField.requestFocusInWindow();
107 } else {
108 myApp.getRootPane().setDefaultButton(null);
112 // event handler pentru butoanele din panou: gazduire server si conectare la
113 // server.
114 public void actionPerformed (ActionEvent ev) {
115 String cmd = ev.getActionCommand();
117 String nick = "";
119 if (cmd.equals("startServer")) {
120 nick = serverNickField.getText();
121 } else if (cmd.equals("conectareServer")) {
122 nick = clientNickField.getText();
125 // validare nume
126 if (!nick.isEmpty()) {
127 nick = nick.trim();
128 if (!nick.isEmpty()) {
129 nick = nick.replaceAll("/\\s+/", "-");
131 if (nick.equals("#server")) {
132 nick = "";
136 if (cmd.equals("startServer") && !nick.isEmpty()) {
137 int port = ((SpinnerNumberModel) serverPortField.getModel()).getNumber().intValue();
138 myApp.startServer(nick, port);
140 } else if (cmd.equals("conectareServer") && !nick.isEmpty() &&
141 !serverAddressField.getText().trim().isEmpty()) {
143 int port = ((SpinnerNumberModel) clientPortField.getModel()).getNumber().intValue();
144 myApp.conectareServer(nick, serverAddressField.getText().trim(), port);
146 } else if (cmd.equals("iesireApp")) {
147 myApp.iesireApp();
151 // event handler pentru schimbarea tabului activ.
152 public void stateChanged (ChangeEvent ev) {
153 Object src = ev.getSource();
154 if (!(src instanceof JTabbedPane)) {
155 return;
158 JTabbedPane panou = (JTabbedPane) src;
159 if (panou == panouTaburi) {
160 int sel = panou.getSelectedIndex();
161 if (sel == 0) {
162 myApp.getRootPane().setDefaultButton(btnConectareServer);
163 } else if (sel == 1) {
164 myApp.getRootPane().setDefaultButton(btnStartServer);
165 } else {
166 myApp.getRootPane().setDefaultButton(null);
171 // panoul ce permite gazduirea de server chat.
172 private JPanel panouGazduireChat () {
173 GridBagConstraints c = new GridBagConstraints();
174 c.fill = c.HORIZONTAL;
175 c.anchor = c.WEST;
176 c.insets = new Insets(5, 5, 5, 5);
178 JPanel panou = new JPanel(new GridBagLayout());
179 panou.setName("gazduireChat");
181 SpinnerNumberModel portModel = new SpinnerNumberModel(portMin, portMin, portMax, 1);
182 serverPortField = new JSpinner(portModel);
183 serverPortField.setToolTipText("Portul pe carte serverul asculta conexiuni de la clienti.");
185 JLabel portLabel = new JLabel("Portul de ascultare:");
186 portLabel.setLabelFor(serverPortField);
188 serverNickField = new JTextField();
189 serverNickField.setColumns(10);
190 serverNickField.setToolTipText("Numele tau, in calitatea de client pe server, folosit in discutiile cu ceilalti clienti.");
192 JLabel serverNickLabel = new JLabel("Numele tau:");
193 serverNickLabel.setLabelFor(serverNickField);
195 btnStartServer = new JButton("Porneste serverul!");
196 btnStartServer.setDefaultCapable(true);
197 btnStartServer.setActionCommand("startServer");
198 btnStartServer.addActionListener(this);
200 c.gridx = 0;
201 c.gridy = 0;
202 panou.add(serverNickLabel, c);
204 c.gridy = 1;
205 panou.add(portLabel, c);
207 c.gridx = 1;
208 c.gridy = 0;
209 c.weightx = 1;
210 c.gridwidth = c.RELATIVE;
211 panou.add(serverNickField, c);
213 c.gridy = 1;
214 panou.add(serverPortField, c);
216 c.gridx = 0;
217 c.gridy = 2;
218 c.anchor = c.NORTHEAST;
219 c.fill = c.NONE;
220 c.gridwidth = 2;
221 c.gridheight = c.REMAINDER;
222 c.weighty = 1;
223 panou.add(btnStartServer, c);
225 return panou;
228 // panoul ce permite conectarea la un server de chat.
229 private JPanel panouConectareServer () {
230 GridBagConstraints c = new GridBagConstraints();
231 c.fill = c.HORIZONTAL;
232 c.anchor = c.WEST;
233 c.insets = new Insets(5, 5, 5, 5);
235 JPanel panou = new JPanel(new GridBagLayout());
236 panou.setName("conectareServer");
238 clientNickField = new JTextField();
239 clientNickField.setColumns(10);
240 clientNickField.setToolTipText("Numele tau in discutiile cu ceilalti clienti conectati la server.");
242 JLabel clientNickLabel = new JLabel("Numele tau:");
243 clientNickLabel.setLabelFor(clientNickField);
245 serverAddressField = new JTextField();
246 serverAddressField.setColumns(10);
248 JLabel serverAddressLabel = new JLabel("Adresa serverului:");
249 serverAddressLabel.setLabelFor(serverAddressField);
251 SpinnerNumberModel portModel = new SpinnerNumberModel(portMin, portMin, portMax, 1);
252 clientPortField = new JSpinner(portModel);
253 clientPortField.setToolTipText("Portul pe carte serverul asculta conexiuni de la clienti.");
255 JLabel portLabel = new JLabel("Portul serverului:");
256 portLabel.setLabelFor(clientPortField);
258 btnConectareServer = new JButton("Conecteaza-te la server!");
259 btnConectareServer.setDefaultCapable(true);
260 btnConectareServer.setActionCommand("conectareServer");
261 btnConectareServer.addActionListener(this);
263 c.gridx = 0;
264 c.gridy = 0;
265 panou.add(clientNickLabel, c);
267 c.gridy = 1;
268 panou.add(serverAddressLabel, c);
270 c.gridy = 2;
271 panou.add(portLabel, c);
273 c.gridx = 1;
274 c.gridy = 0;
275 c.weightx = 1;
276 c.gridwidth = c.RELATIVE;
277 panou.add(clientNickField, c);
279 c.gridy = 1;
280 panou.add(serverAddressField, c);
282 c.gridy = 2;
283 panou.add(clientPortField, c);
285 c.gridx = 0;
286 c.gridy = 3;
287 c.anchor = c.NORTHEAST;
288 c.fill = c.NONE;
289 c.gridwidth = 2;
290 c.gridheight = c.REMAINDER;
291 c.weighty = 1;
292 panou.add(btnConectareServer, c);
294 return panou;
298 // vim:set fo=wancroql tw=80 ts=2 sw=2 sts=2 sta et ai cin ff=unix: