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