3 * http://www.robodesign.ro
5 * $Date: 2010-05-19 18:35:24 +0300 $
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();
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);
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);
77 c
.gridheight
= c
.RELATIVE
;
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)) {
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));
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();
108 myApp
.getRootPane().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();
119 if (cmd
.equals("startServer")) {
120 nick
= serverNickField
.getText();
121 } else if (cmd
.equals("conectareServer")) {
122 nick
= clientNickField
.getText();
126 if (!nick
.isEmpty()) {
128 if (!nick
.isEmpty()) {
129 nick
= nick
.replaceAll("/\\s+/", "-");
131 if (nick
.equals("#server")) {
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")) {
151 // event handler pentru schimbarea tabului activ.
152 public void stateChanged (ChangeEvent ev
) {
153 Object src
= ev
.getSource();
154 if (!(src
instanceof JTabbedPane
)) {
158 JTabbedPane panou
= (JTabbedPane
) src
;
159 if (panou
== panouTaburi
) {
160 int sel
= panou
.getSelectedIndex();
162 myApp
.getRootPane().setDefaultButton(btnConectareServer
);
163 } else if (sel
== 1) {
164 myApp
.getRootPane().setDefaultButton(btnStartServer
);
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
;
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);
202 panou
.add(serverNickLabel
, c
);
205 panou
.add(portLabel
, c
);
210 c
.gridwidth
= c
.RELATIVE
;
211 panou
.add(serverNickField
, c
);
214 panou
.add(serverPortField
, c
);
218 c
.anchor
= c
.NORTHEAST
;
221 c
.gridheight
= c
.REMAINDER
;
223 panou
.add(btnStartServer
, c
);
228 // panoul ce permite conectarea la un server de chat.
229 private JPanel
panouConectareServer () {
230 GridBagConstraints c
= new GridBagConstraints();
231 c
.fill
= c
.HORIZONTAL
;
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);
265 panou
.add(clientNickLabel
, c
);
268 panou
.add(serverAddressLabel
, c
);
271 panou
.add(portLabel
, c
);
276 c
.gridwidth
= c
.RELATIVE
;
277 panou
.add(clientNickField
, c
);
280 panou
.add(serverAddressField
, c
);
283 panou
.add(clientPortField
, c
);
287 c
.anchor
= c
.NORTHEAST
;
290 c
.gridheight
= c
.REMAINDER
;
292 panou
.add(btnConectareServer
, c
);
298 // vim:set fo=wancroql tw=80 ts=2 sw=2 sts=2 sta et ai cin ff=unix: