3 * http://www.robodesign.ro
5 * $Date: 2010-05-06 20:17:02 +0300 $
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();
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);
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);
80 c
.gridwidth
= c
.RELATIVE
;
81 c
.gridheight
= c
.RELATIVE
;
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);
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();
108 myApp
.rootPane
.setDefaultButton(null);
112 // event handler pentru butoanele din panou: gazduire server si conectare la
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")) {
135 // event handler pentru schimbarea tabului activ.
136 public void stateChanged (ChangeEvent ev
) {
137 Object src
= ev
.getSource();
138 if (!(src
instanceof JTabbedPane
)) {
142 JTabbedPane panou
= (JTabbedPane
) src
;
143 if (panou
== panouTaburi
) {
144 int sel
= panou
.getSelectedIndex();
146 myApp
.rootPane
.setDefaultButton(btnConectareServer
);
147 } else if (sel
== 1) {
148 myApp
.rootPane
.setDefaultButton(btnStartServer
);
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
;
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);
188 panou
.add(serverNickLabel
, c
);
191 panou
.add(portLabel
, c
);
196 c
.gridwidth
= c
.RELATIVE
;
197 panou
.add(serverNickField
, c
);
200 panou
.add(serverPortField
, c
);
204 c
.anchor
= c
.NORTHEAST
;
206 c
.gridwidth
= c
.REMAINDER
;
207 c
.gridheight
= c
.REMAINDER
;
209 panou
.add(btnStartServer
, c
);
214 // panoul ce permite conectarea la un server de chat.
215 private JPanel
panouConectareServer () {
216 GridBagConstraints c
= new GridBagConstraints();
217 c
.fill
= c
.HORIZONTAL
;
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);
253 panou
.add(clientNickLabel
, c
);
256 panou
.add(serverAddressLabel
, c
);
259 panou
.add(portLabel
, c
);
264 c
.gridwidth
= c
.RELATIVE
;
265 panou
.add(clientNickField
, c
);
268 panou
.add(serverAddressField
, c
);
271 panou
.add(clientPortField
, c
);
275 c
.anchor
= c
.NORTHEAST
;
277 c
.gridwidth
= c
.REMAINDER
;
278 c
.gridheight
= c
.REMAINDER
;
280 panou
.add(btnConectareServer
, c
);
286 // vim:set fo=wancroql tw=80 ts=2 sw=2 sts=2 sta et ai cin ff=unix: