Modificări pentru partea de chat.
[ChatApp.git] / ChatApp / PrimaPagina.java
blobac14e6e9572a183ab259072e3950100e25f7096e
1 /*
2 * © 2010 ROBO Design
3 * http://www.robodesign.ro
5 * $Date: 2010-05-06 20:17:02 +0300 $
6 */
8 package ChatApp;
10 import java.awt.event.ActionEvent;
11 import java.awt.event.ActionListener;
12 import java.awt.GridBagConstraints;
13 import java.awt.GridBagLayout;
14 import java.awt.Insets;
15 import java.awt.Component;
16 import java.awt.Dimension;
17 import java.awt.Container;
18 import javax.swing.event.ChangeEvent;
19 import javax.swing.event.ChangeListener;
20 import javax.swing.JButton;
21 import javax.swing.JComponent;
22 import javax.swing.JLabel;
23 import javax.swing.JPanel;
24 import javax.swing.JSpinner;
25 import javax.swing.JFrame;
26 import javax.swing.JTabbedPane;
27 import javax.swing.JTextField;
28 import javax.swing.SpinnerNumberModel;
30 // Panoul principal, "prima pagina". Acesta permite utilizatorului:
31 // - sa porneasca serverul pentru a gazdui un chat,
32 // - sa se conecteze la un alt server, la un chat existent.
34 public class PrimaPagina extends JPanel implements ActionListener, ChangeListener {
35 private appMain myApp;
36 private JTabbedPane panouTaburi;
37 private JSpinner serverPortField;
38 private JSpinner clientPortField;
39 private int portMin = 1024;
40 private int portMax = 65535;
41 private JTextField serverNickField;
42 private JTextField clientNickField;
43 private JTextField serverAddressField;
44 private JButton btnConectareServer;
45 private JButton btnStartServer;
47 public PrimaPagina (appMain rootApp) {
48 super(new GridBagLayout());
50 GridBagConstraints c = new GridBagConstraints();
51 myApp = rootApp;
53 panouTaburi = new JTabbedPane();
54 panouTaburi.setName("taburiPrimaPagina");
55 panouTaburi.addTab("Conectare la server", this.panouConectareServer());
56 panouTaburi.addTab("Gazduire server", this.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.gridwidth = 1;
64 c.gridheight = 1;
65 c.weightx = 1;
66 c.weighty = 1;
67 c.insets = new Insets(12, 12, 6, 12);
68 this.add(panouTaburi, c);
70 JButton btnIesire = new JButton("Iesire");
71 btnIesire.setToolTipText("Iesire din aplicatie.");
72 btnIesire.setActionCommand("iesireApp");
73 btnIesire.setDefaultCapable(false);
74 btnIesire.addActionListener(this);
76 c.fill = c.NONE;
77 c.anchor = c.EAST;
78 c.gridx = 0;
79 c.gridy = 1;
80 c.gridwidth = c.RELATIVE;
81 c.gridheight = c.RELATIVE;
82 c.weightx = 0;
83 c.weighty = 0;
84 c.insets = new Insets(6, 12, 12, 12);
85 this.add(btnIesire, c);
88 // initializarea interfetei
89 public void initializare () {
90 JFrame f = myApp.myFrame;
92 f.setTitle("ChatApp");
93 f.setMinimumSize(new Dimension(350, 300));
94 f.setPreferredSize(null);
95 f.setContentPane((Container) this);
96 f.pack();
97 f.setLocationRelativeTo(null);
99 Component tab = panouTaburi.getSelectedComponent();
101 if (tab.getName().equals("conectareServer")) {
102 myApp.rootPane.setDefaultButton(btnConectareServer);
103 clientNickField.requestFocusInWindow();
104 } else if (tab.getName().equals("gazduireChat")) {
105 myApp.rootPane.setDefaultButton(btnStartServer);
106 serverNickField.requestFocusInWindow();
107 } else {
108 myApp.rootPane.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 if (cmd.equals("startServer") &&
118 serverNickField.getText().length() > 0) {
120 int port = ((SpinnerNumberModel) serverPortField.getModel()).getNumber().intValue();
121 myApp.startServer(serverNickField.getText(), port);
123 } else if (cmd.equals("conectareServer") &&
124 clientNickField.getText().length() > 0 &&
125 serverAddressField.getText().length() > 0) {
127 int port = ((SpinnerNumberModel) clientPortField.getModel()).getNumber().intValue();
128 myApp.conectareServer(clientNickField.getText(), serverAddressField.getText(), port);
130 } else if (cmd.equals("iesireApp")) {
131 myApp.iesireApp();
135 // event handler pentru schimbarea tabului activ.
136 public void stateChanged (ChangeEvent ev) {
137 Object src = ev.getSource();
138 if (!(src instanceof JTabbedPane)) {
139 return;
142 JTabbedPane panou = (JTabbedPane) src;
143 if (panou == panouTaburi) {
144 int sel = panou.getSelectedIndex();
145 if (sel == 0) {
146 myApp.rootPane.setDefaultButton(btnConectareServer);
147 } else if (sel == 1) {
148 myApp.rootPane.setDefaultButton(btnStartServer);
149 } else {
150 myApp.rootPane.setDefaultButton(null);
155 // panoul ce permite gazduirea de server chat.
156 private JPanel panouGazduireChat () {
157 GridBagConstraints c = new GridBagConstraints();
158 c.fill = c.HORIZONTAL;
159 c.anchor = c.WEST;
160 c.insets = new Insets(5, 5, 5, 5);
162 JPanel panou = new JPanel(new GridBagLayout());
163 panou.setName("gazduireChat");
165 SpinnerNumberModel portModel = new SpinnerNumberModel(portMin, portMin, portMax, 1);
166 serverPortField = new JSpinner(portModel);
167 serverPortField.setToolTipText("Portul pe carte serverul asculta conexiuni de la clienti.");
169 JLabel portLabel = new JLabel("Port de ascultare:");
170 portLabel.setLabelFor(serverPortField);
172 serverNickField = new JTextField();
173 serverNickField.setColumns(10);
174 serverNickField.setToolTipText("Numele tau, in calitatea de client pe server, folosit in discutiile cu ceilalti clienti.");
176 JLabel serverNickLabel = new JLabel("Nume:");
177 serverNickLabel.setLabelFor(serverNickField);
179 btnStartServer = new JButton("Porneste serverul!");
180 btnStartServer.setDefaultCapable(true);
181 btnStartServer.setActionCommand("startServer");
182 btnStartServer.addActionListener(this);
184 c.gridx = 0;
185 c.gridy = 0;
186 c.weightx = 0;
187 c.weighty = 0;
188 panou.add(serverNickLabel, c);
190 c.gridy = 1;
191 panou.add(portLabel, c);
193 c.gridx = 1;
194 c.gridy = 0;
195 c.weightx = 1;
196 c.gridwidth = c.RELATIVE;
197 panou.add(serverNickField, c);
199 c.gridy = 1;
200 panou.add(serverPortField, c);
202 c.gridx = 0;
203 c.gridy = 2;
204 c.anchor = c.NORTHEAST;
205 c.fill = c.NONE;
206 c.gridwidth = c.REMAINDER;
207 c.gridheight = c.REMAINDER;
208 c.weighty = 1;
209 panou.add(btnStartServer, c);
211 return panou;
214 // panoul ce permite conectarea la un server de chat.
215 private JPanel panouConectareServer () {
216 GridBagConstraints c = new GridBagConstraints();
217 c.fill = c.HORIZONTAL;
218 c.anchor = c.WEST;
219 c.insets = new Insets(5, 5, 5, 5);
221 JPanel panou = new JPanel(new GridBagLayout());
222 panou.setName("conectareServer");
224 clientNickField = new JTextField();
225 clientNickField.setColumns(10);
226 clientNickField.setToolTipText("Numele tau in discutiile cu ceilalti clienti conectati la server.");
228 JLabel clientNickLabel = new JLabel("Nume:");
229 clientNickLabel.setLabelFor(clientNickField);
231 serverAddressField = new JTextField();
232 serverAddressField.setColumns(10);
234 JLabel serverAddressLabel = new JLabel("Adresa serverului:");
235 serverAddressLabel.setLabelFor(serverAddressField);
237 SpinnerNumberModel portModel = new SpinnerNumberModel(portMin, portMin, portMax, 1);
238 clientPortField = new JSpinner(portModel);
239 clientPortField.setToolTipText("Portul pe carte serverul asculta conexiuni de la clienti.");
241 JLabel portLabel = new JLabel("Portul serverului:");
242 portLabel.setLabelFor(clientPortField);
244 btnConectareServer = new JButton("Conecteaza-te la server!");
245 btnConectareServer.setDefaultCapable(true);
246 btnConectareServer.setActionCommand("conectareServer");
247 btnConectareServer.addActionListener(this);
249 c.gridx = 0;
250 c.gridy = 0;
251 c.weightx = 0;
252 c.weighty = 0;
253 panou.add(clientNickLabel, c);
255 c.gridy = 1;
256 panou.add(serverAddressLabel, c);
258 c.gridy = 2;
259 panou.add(portLabel, c);
261 c.gridx = 1;
262 c.gridy = 0;
263 c.weightx = 1;
264 c.gridwidth = c.RELATIVE;
265 panou.add(clientNickField, c);
267 c.gridy = 1;
268 panou.add(serverAddressField, c);
270 c.gridy = 2;
271 panou.add(clientPortField, c);
273 c.gridx = 0;
274 c.gridy = 3;
275 c.anchor = c.NORTHEAST;
276 c.fill = c.NONE;
277 c.gridwidth = c.REMAINDER;
278 c.gridheight = c.REMAINDER;
279 c.weighty = 1;
280 panou.add(btnConectareServer, c);
282 return panou;
286 // vim:set fo=wancroql tw=80 ts=2 sw=2 sts=2 sta et ai cin ff=unix: