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