1 package wbKerho;
2
3 import java.awt.BorderLayout;
4 import java.awt.Color;
5 import java.awt.Component;
6 import java.awt.Dimension;
7 import java.awt.EventQueue;
8 import java.awt.event.ActionEvent;
9 import java.awt.event.ActionListener;
10 import java.awt.event.InputEvent;
11 import java.awt.event.KeyEvent;
12 import java.awt.event.WindowAdapter;
13 import java.awt.event.WindowEvent;
14
15 import javax.swing.AbstractAction;
16 import javax.swing.Action;
17 import javax.swing.Box;
18 import javax.swing.BoxLayout;
19 import javax.swing.JButton;
20 import javax.swing.JFrame;
21 import javax.swing.JLabel;
22 import javax.swing.JMenu;
23 import javax.swing.JMenuBar;
24 import javax.swing.JMenuItem;
25 import javax.swing.JOptionPane;
26 import javax.swing.JPanel;
27 import javax.swing.JScrollPane;
28 import javax.swing.JSplitPane;
29 import javax.swing.JTextField;
30 import javax.swing.KeyStroke;
31 import javax.swing.SwingConstants;
32 import javax.swing.UIManager;
33 import javax.swing.WindowConstants;
34 import javax.swing.border.BevelBorder;
35 import javax.swing.border.EmptyBorder;
36 import javax.swing.border.LineBorder;
37 import javax.swing.table.DefaultTableModel;
38
39 import kerho.Jasen;
40 import kerhoswing.KerhoSwing;
41 import fi.jyu.mit.gui.ComboBoxChooser;
42 import fi.jyu.mit.gui.EditPanel;
43 import fi.jyu.mit.gui.StringTable;
44 import fi.jyu.mit.gui.GenListChooser;
45
46
55 public class KerhoGUI extends JFrame {
56
57 private static final long serialVersionUID = 1L;
58
59 private String kerhonnimi = "kelmit";
60
61 private final JPanel contentPane = new JPanel();
62 private final JTextField editHaku = new JTextField();
63 private final JPanel panelLista = new JPanel();
64 private final JPanel panelHaku = new JPanel();
65 private final JLabel labelHakuehto = new JLabel("Hakuehto");
66 private final JPanel panelNappulat = new JPanel();
67 private final JButton buttonUusi = new JButton("Uusi j\u00E4sen");
68 private final JButton buttonTalleta = new JButton("Talleta");
69 private final JPanel panelHarrastukset = new JPanel();
70 private final JMenuBar menuBar = new JMenuBar();
71 private final JMenu mnTiedosto = new JMenu("Tiedosto");
72 private final JMenuItem mntmLopeta = new JMenuItem("Lopeta");
73 private final JMenuItem mntmTalleta = new JMenuItem("Talleta");
74 private final JMenu mnMuokkaa = new JMenu("Muokkaa");
75 private final JMenuItem mntmLisaaUusiJasen = new JMenuItem("Lis\u00E4\u00E4 uusi j\u00E4sen");
76 private final JMenuItem mntmLisaaHarrastus = new JMenuItem("Lis\u00E4\u00E4 harrastus");
77 private final JMenu mnApua = new JMenu("Apua");
78 private final JMenuItem mntmApua = new JMenuItem("Apua");
79 private final JMenuItem mntmTietoja = new JMenuItem("Tietoja...");
80 private final JPanel panelJasen = new JPanel();
81 private final JScrollPane scrollJasen = new JScrollPane(panelJasen);
82 private final Box boxJasen = Box.createVerticalBox();
83 private final JPanel panelJasenTiedot = new JPanel();
84 private final JLabel labelJasenTiedot = new JLabel("J\u00E4sen tiedot");
85 private final JLabel labelHarrastukset = new JLabel("J\u00E4senen harrastukset");
86 private final JPanel panelJasenNappulat = new JPanel();
87 private final JPanel panelHarrastusNappulat = new JPanel();
88 private final JButton buttonUusiHarrastus = new JButton("Uusi harrastus");
89 private final JButton buttonPoistaHarrastus = new JButton("Poista harrastus");
90 private final JLabel labelJasenet = new JLabel("J\u00E4senet");
91 private final JMenuItem mntmPoistaJasen = new JMenuItem("Poista j\u00E4sen...");
92 private final JMenuItem mntmPoistaHarrastus = new JMenuItem("Poista harrastus");
93 private final JSplitPane splitPaneJasenHarrastukset = new JSplitPane();
94 private final JSplitPane splitPaneListaJasentiedot = new JSplitPane();
95 private final JLabel labelVirhe = new JLabel(" ");
96 private final JMenuItem mntmTulosta = new JMenuItem("Tulosta...");
97 private final JMenuItem mntmAvaa = new JMenuItem("Avaa...");
98 private final EditPanel editPanelNimi = new EditPanel();
99 private final EditPanel editPanelHetu = new EditPanel();
100 private final EditPanel editPanelKatuosoite = new EditPanel();
101 private final EditPanel editPanelPostinumero = new EditPanel();
102 private final EditPanel editPanePostiosoite = new EditPanel();
103 private final EditPanel editPanelKotipuhelin = new EditPanel();
104 private final EditPanel editPanelTyopuhelin = new EditPanel();
105 private final EditPanel editPanelAutopuhelin = new EditPanel();
106 private final EditPanel editPanelLiittymisvuosi = new EditPanel();
107 private final EditPanel editPanelJasenmaksu = new EditPanel();
108 private final EditPanel editPanelMaksettumaksu = new EditPanel();
109 private final EditPanel editPanelLisatietoja = new EditPanel();
110
113 private final KerhoSwing kerhoswing = new KerhoSwing();
114 private final Action actionUusiJasen = new ActionUusiJasen();
115 private final Action actionTalleta = new ActionTalleta();
116 private final Action actionUusiHarrastus = new ActionUusiHarrastus();
117 private final Action actionPoistaHarrastus = new ActionPoistaHarrastus();
118 private final ComboBoxChooser cbKentat = new ComboBoxChooser();
119 private final StringTable stringTable = new StringTable();
120 private final GenListChooser<Jasen> listJasenet = new GenListChooser<Jasen>();
121
122
123
126 public KerhoSwing getKerhoswing() {
127 return kerhoswing;
128 }
129
130
131
135 public static void main(final String[] args) {
136 EventQueue.invokeLater(new Runnable() {
137 @Override
138 public void run() {
139 try {
140 UIManager.setLookAndFeel(UIManager
141 .getSystemLookAndFeelClassName());
142 KerhoGUI frame = new KerhoGUI();
143 frame.setVisible(true);
144 if (args.length == 0) {
145 if (!frame.avaa())
146 System.exit(ABORT);
147 } else
148 frame.lueTiedosto(args[0]);
149 } catch (Exception e) {
150 e.printStackTrace();
151 }
152 }
153 });
154 }
155
156
157
160 public KerhoGUI() {
161 kerhoswing.setTableHarrastukset(stringTable);
162 kerhoswing.setCbKentat(cbKentat);
163 kerhoswing.setListJasenet(listJasenet);
164 addWindowListener(new WindowAdapter() {
165 @Override
166 public void windowClosing(WindowEvent arg0) {
167 getKerhoswing().talleta();
168 }
169 });
170 kerhoswing.setPanelJasen(boxJasen);
171 kerhoswing.setLabelVirhe(labelVirhe);
172 kerhoswing.setEditHaku(editHaku);
173
174 setTitle("Kerho");
175 setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
177 setBounds(100, 100, 633, 537);
178 contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
179 contentPane.setLayout(new BorderLayout(0, 0));
180 setContentPane(contentPane);
181
182 panelNappulat.setBorder(new LineBorder(new Color(0, 0, 0)));
183 contentPane.add(panelNappulat, BorderLayout.SOUTH);
184 panelNappulat.setLayout(new BorderLayout(0, 0));
185
186 panelNappulat.add(panelJasenNappulat, BorderLayout.WEST);
187 panelNappulat.add(panelHarrastusNappulat, BorderLayout.EAST);
188 buttonUusi.setAction(actionUusiJasen);
189 panelJasenNappulat.add(buttonUusi);
190 buttonUusi.setMnemonic('U');
191 buttonTalleta.setAction(actionTalleta);
192 panelJasenNappulat.add(buttonTalleta);
193 buttonUusiHarrastus.setAction(actionUusiHarrastus);
194
195 panelHarrastusNappulat.add(buttonUusiHarrastus);
196 buttonPoistaHarrastus.setAction(actionPoistaHarrastus);
197
198 panelHarrastusNappulat.add(buttonPoistaHarrastus);
199
200 contentPane.add(menuBar, BorderLayout.NORTH);
202 mnTiedosto.setMnemonic('T');
203
204 menuBar.add(mnTiedosto);
205 mntmLopeta.addActionListener(new ActionListener() {
206 @Override
207 public void actionPerformed(ActionEvent arg0) {
208 lopeta();
209 }
210 });
211 mntmLopeta.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q,
212 InputEvent.CTRL_MASK));
213 mntmTalleta.setAction(actionTalleta);
214 mntmTalleta.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,
215 InputEvent.CTRL_MASK));
216 mnTiedosto.add(mntmTalleta);
217 mntmAvaa.addActionListener(new ActionListener() {
218 @Override
219 public void actionPerformed(ActionEvent arg0) {
220 avaa();
221 }
222 });
223
224 mnTiedosto.add(mntmAvaa);
225 mntmTulosta.addActionListener(new ActionListener() {
226 @Override
227 public void actionPerformed(ActionEvent arg0) {
228 tulosta();
229 }
230 });
231 mntmTulosta.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_T,
232 InputEvent.CTRL_MASK));
233
234 mnTiedosto.add(mntmTulosta);
235
236 mnTiedosto.add(mntmLopeta);
237 mnMuokkaa.setMnemonic('M');
238
239 menuBar.add(mnMuokkaa);
240 mntmLisaaUusiJasen.setAction(actionUusiJasen);
241 mntmLisaaUusiJasen.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,
242 InputEvent.CTRL_MASK));
243
244 mnMuokkaa.add(mntmLisaaUusiJasen);
245 mntmLisaaHarrastus.setAction(actionUusiHarrastus);
246 mntmLisaaHarrastus.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_J,
247 InputEvent.CTRL_MASK));
248
249 mnMuokkaa.add(mntmLisaaHarrastus);
250 mntmPoistaJasen.addActionListener(new ActionListener() {
251 @Override
252 public void actionPerformed(ActionEvent arg0) {
253 getKerhoswing().poistaJasen();
254 }
255 });
256
257 mnMuokkaa.add(mntmPoistaJasen);
258 mntmPoistaHarrastus.setAction(actionPoistaHarrastus);
259
260 mnMuokkaa.add(mntmPoistaHarrastus);
261 mnApua.setMnemonic('A');
262 menuBar.add(mnApua);
263 mntmApua.addActionListener(new ActionListener() {
264 @Override
265 public void actionPerformed(ActionEvent arg0) {
266 getKerhoswing().avustus();
267 }
268 });
269
270 mnApua.add(mntmApua);
271 mntmTietoja.addActionListener(new ActionListener() {
272 @Override
273 public void actionPerformed(ActionEvent arg0) {
274 about();
275 }
276
277 });
278
279 mnApua.add(mntmTietoja);
280
281 contentPane.add(splitPaneListaJasentiedot, BorderLayout.CENTER);
282 labelHakuehto.setAlignmentX(Component.CENTER_ALIGNMENT);
283 labelHakuehto.setLabelFor(editHaku);
284 splitPaneListaJasentiedot.setLeftComponent(panelLista);
285 panelLista.setBorder(new BevelBorder(BevelBorder.LOWERED, null, null,
286 null, null));
287 panelLista.setLayout(new BorderLayout(0, 0));
288 panelHaku.setBorder(new LineBorder(new Color(0, 0, 0)));
289
290 panelLista.add(panelHaku, BorderLayout.NORTH);
291 panelHaku.setLayout(new BoxLayout(panelHaku, BoxLayout.Y_AXIS));
292 panelHaku.add(labelHakuehto);
293 cbKentat.setSelectedIndex(0);
294 cbKentat.setKohteet(new String[] { "nimi", "hetu", "katuosoite",
295 "postinumero", "postiosoite" });
296
297 panelHaku.add(cbKentat);
298 editHaku.setToolTipText("Kirjoita hakuehto yll\u00E4 valitulle kent\u00E4lle");
299
300 panelHaku.add(editHaku);
301 editHaku.setColumns(10);
302 labelJasenet.setAlignmentX(Component.CENTER_ALIGNMENT);
303 labelJasenet.setHorizontalAlignment(SwingConstants.CENTER);
304
305 panelHaku.add(labelJasenet);
306 listJasenet.setKohteet(new String[] { "Ankka Aku", "Ankka Iines",
307 "Ankka Roope", "Ponteva Veli", "Susi Sepe" });
308
309 panelLista.add(listJasenet, BorderLayout.CENTER);
310
311 editHaku.requestFocus();
312 splitPaneListaJasentiedot.setRightComponent(splitPaneJasenHarrastukset);
313 splitPaneJasenHarrastukset.setResizeWeight(1.0);
314 splitPaneJasenHarrastukset.setRightComponent(panelHarrastukset);
315 panelHarrastukset.setMaximumSize(new Dimension(200, 32767));
316 panelHarrastukset.setLayout(new BorderLayout(0, 0));
317 panelHarrastukset.add(labelHarrastukset, BorderLayout.NORTH);
318 labelHarrastukset.setHorizontalAlignment(SwingConstants.CENTER);
319 stringTable.getTable().setModel(
320 new DefaultTableModel(
321 new Object[][] {
322 {"kalastus", new Integer(1955), new Integer(20)},
323 {"laiskottelu", new Integer(1950), new Integer(20)},
324 {"ty\u00F6n pakoilu", new Integer(1952), new Integer(40)},
325 },
326 new String[] {
327 "ala", "aloitusvuosi", "h/vko"
328 }
329 ));
330 stringTable.setMinimumSize(new Dimension(200, 24));
331
332 panelHarrastukset.add(stringTable, BorderLayout.CENTER);
333 splitPaneJasenHarrastukset.setLeftComponent(panelJasenTiedot);
334 panelJasenTiedot.setLayout(new BorderLayout(0, 0));
335 panelJasenTiedot.add(scrollJasen);
336 labelJasenTiedot.setHorizontalAlignment(SwingConstants.CENTER);
337
338 panelJasenTiedot.add(labelJasenTiedot, BorderLayout.NORTH);
339 labelVirhe.setOpaque(true);
340 labelVirhe.setHorizontalAlignment(SwingConstants.CENTER);
341
342 panelJasenTiedot.add(labelVirhe, BorderLayout.SOUTH);
343 panelJasen.setBorder(new BevelBorder(BevelBorder.LOWERED, null, null, null, null));
344 panelJasen.setLayout(new BorderLayout(0, 0));
345
346 panelJasen.add(boxJasen, BorderLayout.NORTH);
347 editPanelNimi.setText("Ankka Aku");
348
349 boxJasen.add(editPanelNimi);
350 editPanelHetu.setCaption("hetu");
351 editPanelHetu.setText("010245-123U");
352
353 boxJasen.add(editPanelHetu);
354 editPanelKatuosoite.setCaption("katuosoite");
355 editPanelKatuosoite.setText("Ankkakuja 6");
356
357 boxJasen.add(editPanelKatuosoite);
358 editPanelPostinumero.setCaption("postinumero");
359 editPanelPostinumero.setText("12345");
360
361 boxJasen.add(editPanelPostinumero);
362 editPanePostiosoite.setText("ANKKALINNA");
363 editPanePostiosoite.setCaption("postiosoite");
364
365 boxJasen.add(editPanePostiosoite);
366 editPanelKotipuhelin.setText("12-12324");
367 editPanelKotipuhelin.setCaption("kotipuhelin");
368
369 boxJasen.add(editPanelKotipuhelin);
370 editPanelTyopuhelin.setText("2");
371 editPanelTyopuhelin.setCaption("ty\u00F6puhelin");
372
373 boxJasen.add(editPanelTyopuhelin);
374 editPanelAutopuhelin.setCaption("autopuhelin");
375 boxJasen.add(editPanelAutopuhelin);
376 editPanelLiittymisvuosi.setText("1996");
377 editPanelLiittymisvuosi.setCaption("liittymisvuosi");
378 boxJasen.add(editPanelLiittymisvuosi);
379 editPanelJasenmaksu.setText("50.00");
380 editPanelJasenmaksu.setCaption("j\u00E4senmaksu");
381
382 boxJasen.add(editPanelJasenmaksu);
383 editPanelMaksettumaksu.setText("0.0");
384 editPanelMaksettumaksu.setCaption("maksettu maksu");
385
386 boxJasen.add(editPanelMaksettumaksu);
387 editPanelLisatietoja.setText("Velkaa Roopelle");
388 editPanelLisatietoja.setCaption("lis\u00E4tietoa");
389
390 boxJasen.add(editPanelLisatietoja);
391 }
392
393
394
397 @SuppressWarnings("unused")
398 protected void about() {
399 new TiedotDialog();
400 }
401
402
403
407 protected void lueTiedosto(String nimi) {
408 kerhonnimi = nimi;
409 setTitle("Kerho - " + kerhonnimi);
410 String virhe = kerhoswing.lueTiedosto(nimi);
411 if (virhe != null)
412 JOptionPane.showMessageDialog(null, virhe);
413 }
414
415
416
419 protected void lopeta() {
420 processWindowEvent(new WindowEvent(this, WindowEvent.WINDOW_CLOSING));
421 }
422
423
424
427 protected void tulosta() {
428 TulostusDialog dialog = new TulostusDialog();
429 kerhoswing.tulostaValitut(dialog.getTextArea());
430 dialog.setVisible(true);
431 }
432
433
434
439 protected boolean avaa() {
440 String uusinimi = KerhonNimiDialog.askName(kerhonnimi);
442 if (uusinimi == null)
443 return false;
444 lueTiedosto(uusinimi);
445 return true;
446 }
447
448 private class ActionUusiJasen extends AbstractAction {
449 private static final long serialVersionUID = 1L;
450
451
452 public ActionUusiJasen() {
453 putValue(NAME, "Uusi jäsen");
454 putValue(SHORT_DESCRIPTION, "Lisää uuden jäsenen kerhoon");
455 }
456
457
458 @Override
459 public void actionPerformed(ActionEvent e) {
460 getKerhoswing().uusiJasen();
461 }
462 }
463
464 private class ActionTalleta extends AbstractAction {
465 private static final long serialVersionUID = 1L;
466
467
468 public ActionTalleta() {
469 putValue(NAME, "Talleta");
470 putValue(SHORT_DESCRIPTION, "Tallettaa kerhon tiedot");
471 }
472
473
474 @Override
475 public void actionPerformed(ActionEvent e) {
476 getKerhoswing().talleta();
477 }
478
479 }
480
481 private class ActionUusiHarrastus extends AbstractAction {
482 private static final long serialVersionUID = 1L;
483
484
485 public ActionUusiHarrastus() {
486 putValue(NAME, "Lis\u00E4\u00E4 harrastus");
487 putValue(SHORT_DESCRIPTION,
488 "Lis\u00E4\u00E4 j\u00E4senelle uuden harrastuksen");
489 }
490
491
492 @Override
493 public void actionPerformed(ActionEvent e) {
494 getKerhoswing().uusiHarrastus();
495 }
496 }
497
498 private class ActionPoistaHarrastus extends AbstractAction {
499 private static final long serialVersionUID = 1L;
500
501
502 public ActionPoistaHarrastus() {
503 putValue(NAME, "Poista harrastus");
504 putValue(SHORT_DESCRIPTION, "Poistetaan kohdalla oleva harrastus");
505 }
506
507
508 @Override
509 public void actionPerformed(ActionEvent e) {
510 getKerhoswing().poistaHarrastus();
511 }
512 }
513 }
514