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