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