1   package capocalGUI;
2   
3   import java.awt.BorderLayout;
4   import java.awt.Component;
5   import java.awt.Dimension;
6   import java.awt.EventQueue;
7   import java.awt.Font;
8   import java.awt.event.ActionEvent;
9   import java.awt.event.WindowEvent;
10  
11  import javax.swing.AbstractAction;
12  import javax.swing.AbstractListModel;
13  import javax.swing.Action;
14  import javax.swing.Box;
15  import javax.swing.BoxLayout;
16  import javax.swing.JButton;
17  import javax.swing.JFrame;
18  import javax.swing.JLabel;
19  import javax.swing.JList;
20  import javax.swing.JMenu;
21  import javax.swing.JMenuBar;
22  import javax.swing.JMenuItem;
23  import javax.swing.JPanel;
24  import javax.swing.JScrollPane;
25  import javax.swing.JSplitPane;
26  import javax.swing.JTextArea;
27  import javax.swing.JTextField;
28  import javax.swing.SwingConstants;
29  import javax.swing.UIManager;
30  import javax.swing.border.EmptyBorder;
31  
32  import kalenteriswing.KalenteriSwing;
33  import fi.jyu.mit.gui.EditPanel;
34  import java.awt.event.KeyAdapter;
35  import java.awt.event.KeyEvent;
36  
37  
38  /**
39   * @author Timo Koski
40   * @version HT7, 14.4.2012
41   */
42  @SuppressWarnings("rawtypes")
43  public class Ck_mainwindow extends JFrame {
44  
45      /**
46       * 
47       */
48      private static final long serialVersionUID = 1L;
49      private JPanel contentPane;
50      private final JPanel panelNappulat = new JPanel();
51      private final JSplitPane splitPaneHakuJaHarjTiedot = new JSplitPane();
52      private final JPanel panelHakuJaHarjPVM = new JPanel();
53      private final JSplitPane splitPaneHarjTiedotJaHarjVaihtoehdot = new JSplitPane();
54      private final JPanel panelHakuJaSiskirj = new JPanel();
55      private final JScrollPane scrollPanePVM = new JScrollPane();
56      private final JList listPVM = new JList();
57      private final JPanel panelHarjTiedot = new JPanel();
58      private final JScrollPane scrollPaneHarjVaihtoehdot = new JScrollPane();
59      private final JList listHarjVaihtoehdot = new JList();
60      private final JLabel lblHarjoituksenTiedot = new JLabel("Harjoituksen tiedot");
61      private final JSplitPane splitPaneHarjTiedot = new JSplitPane();
62      private final JPanel panelHarjPerusTiedot = new JPanel();
63      private final JScrollPane scrollPaneHarjSisTiedot = new JScrollPane();
64      private final Box verticalBoxPerusTiedot = Box.createVerticalBox();
65      private final JMenuBar menuBar = new JMenuBar();
66      private final JMenu menuTiedosto = new JMenu("Tiedosto");
67      private final JMenu menuMuokkaa = new JMenu("Muokkaa");
68      private final JMenu menuTietoja = new JMenu("Tietoja");
69      private final Box verticalBox = Box.createVerticalBox();
70      private final EditPanel editPanelOpe = new EditPanel();
71      private final EditPanel editPanelHarjAlkuaika = new EditPanel();
72      private final EditPanel editPanelHarjLoppuaika = new EditPanel();
73      private final EditPanel editPanelSeura = new EditPanel();
74      private final EditPanel editPanelPaikkakunta = new EditPanel();
75      private final EditPanel editPanel = new EditPanel();
76      private final JLabel labelHaku = new JLabel("Haku");
77      private final JTextField textField = new JTextField();
78      private final JLabel labelPVM = new JLabel("Harjoitusp\u00E4iv\u00E4m\u00E4\u00E4r\u00E4t");
79      private final JLabel labelLisatietoja = new JLabel("Lis\u00E4tietoja");
80      private final JLabel labelHarjSis_1 = new JLabel("Harjoituksen sis\u00E4lt\u00F6");
81      private final JScrollPane scrollPane = new JScrollPane();
82      private final JScrollPane scrollPane_1 = new JScrollPane();
83      private final JButton btnUusiHarjoitus = new JButton("Uusi Harjoitus");
84      private final JPanel panel = new JPanel();
85      private final JPanel panel_1 = new JPanel();
86      private final JButton btnPoistaHarjoitus = new JButton("Poista Harjoitus");
87      private final JButton btnTallenna = new JButton("Tallenna");
88      private final JTextArea txtrHyvtReenitLopuksi = new JTextArea();
89      private final JList list = new JList();
90      private final JMenuItem mntmTallenna = new JMenuItem("Tallenna");
91      private final JMenuItem mntmVaihdaKyttj = new JMenuItem("Vaihda k\u00E4ytt\u00E4j\u00E4\u00E4");
92      private final JMenuItem mntmLopeta = new JMenuItem("Lopeta");
93      private final JMenuItem mntmTulosta = new JMenuItem("Tulosta");
94      private final JMenuItem mntmPoistaSislt = new JMenuItem("Poista sis\u00E4lt\u00F6");
95      private final JMenuItem mntmUusiHarjoitus = new JMenuItem("Uusi harjoitus");
96      private final JMenuItem mntmPoistaHarjoitus = new JMenuItem("Poista harjoitus");
97      private final JMenuItem mntmLisSislt = new JMenuItem("Uusi sis\u00E4lt\u00F6");
98      private final JMenuItem mntmTietoja = new JMenuItem("Tietoja");
99      private final JMenuItem mntmApua = new JMenuItem("Apua");
100     private final JButton btnLopeta = new JButton("Lopeta");
101     private final Action actionUusiHarjoitus = new SwingAction();
102     private final Action actionTallenna = new SwingAction_1();
103     private final Action actionPoistaHarjoitus = new SwingAction_2();
104     private final Action actionLopeta = new SwingAction_3();
105     private final Action actionVaihdaKayttajaa = new SwingAction_4();
106     private final Action actionTulosta = new SwingAction_5();
107     private final Action actionUusiSisalto = new SwingAction_6();
108     private final Action actionPoistaSisalto = new SwingAction_7();
109     private final Action actionApua = new SwingAction_8();
110     private final Action actionTietoja = new SwingAction_9();
111     private final JLabel lblViestikentta = new JLabel("");
112 
113     // omia attribuutteja
114 
115     private final KalenteriSwing ks = new KalenteriSwing();
116 
117     /**
118      * @return ks
119      */
120     public KalenteriSwing getKs() {
121         return ks;
122     }
123 
124     /**
125      * Launch the application.
126      * @param args 
127      */
128     public static void main(String[] args) {
129         try {
130             UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
131         } catch (Throwable e) {
132             e.printStackTrace();
133         }
134         EventQueue.invokeLater(new Runnable() {
135             public void run() {
136                 try {
137                     Ck_mainwindow frame = new Ck_mainwindow(); 
138                     frame.setVisible(true);
139                     frame.getKs().uusiKayttaja();
140                 } catch (Exception e) {
141                     e.printStackTrace();
142                 }
143             }
144         });
145     }
146 
147     /**
148      * Create the frame.
149      */
150     @SuppressWarnings("unchecked")
151     public Ck_mainwindow() {
152 
153         ks.setNimiPanel(editPanel);
154         ks.setPvmList(listPVM);
155         ks.setHarjSisList(list);
156         ks.setSisList(listHarjVaihtoehdot);
157         ks.setLisatieto(txtrHyvtReenitLopuksi);
158         ks.setHarjPerusTiedotBox(verticalBoxPerusTiedot);
159 
160         setTitle("Capoeira-harjoituskalenteri");
161         textField.addKeyListener(new KeyAdapter() {
162             @SuppressWarnings("synthetic-access")
163             @Override
164             public void keyReleased(KeyEvent arg0) {
165                 ks.search(textField.getText());
166             }
167         });
168         textField.setColumns(10);
169         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
170         setBounds(100, 100, 640, 540);
171 
172         setJMenuBar(menuBar);
173 
174         menuBar.add(menuTiedosto);
175         mntmTallenna.setAction(actionTallenna);
176 
177         menuTiedosto.add(mntmTallenna);
178         mntmVaihdaKyttj.setAction(actionVaihdaKayttajaa);
179 
180         menuTiedosto.add(mntmVaihdaKyttj);
181         mntmTulosta.setAction(actionTulosta);
182 
183         menuTiedosto.add(mntmTulosta);
184         mntmLopeta.setAction(actionLopeta);
185 
186         menuTiedosto.add(mntmLopeta);
187 
188         menuBar.add(menuMuokkaa);
189         mntmUusiHarjoitus.setAction(actionUusiHarjoitus);
190 
191         menuMuokkaa.add(mntmUusiHarjoitus);
192         mntmPoistaHarjoitus.setAction(actionPoistaHarjoitus);
193 
194         menuMuokkaa.add(mntmPoistaHarjoitus);
195         mntmLisSislt.setAction(actionUusiSisalto);
196 
197         menuMuokkaa.add(mntmLisSislt);
198         mntmPoistaSislt.setAction(actionPoistaSisalto);
199 
200         menuMuokkaa.add(mntmPoistaSislt);
201 
202         menuBar.add(menuTietoja);
203         mntmApua.setAction(actionApua);
204 
205         menuTietoja.add(mntmApua);
206         mntmTietoja.setAction(actionTietoja);
207 
208         menuTietoja.add(mntmTietoja);
209         contentPane = new JPanel();
210         contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
211         setContentPane(contentPane);
212         contentPane.setLayout(new BorderLayout(0, 0));
213 
214         contentPane.add(panelNappulat, BorderLayout.SOUTH);
215         panelNappulat.setLayout(new BorderLayout(0, 0));
216         panelNappulat.add(panel_1, BorderLayout.EAST);
217         btnTallenna.setAction(actionTallenna);
218 
219         panel_1.add(btnTallenna);
220         btnLopeta.setAction(actionLopeta);
221 
222         panel_1.add(btnLopeta);
223         panelNappulat.add(panel, BorderLayout.WEST);
224         btnUusiHarjoitus.setAction(actionUusiHarjoitus);
225         panel.add(btnUusiHarjoitus);
226         btnPoistaHarjoitus.setAction(actionPoistaHarjoitus);
227 
228         panel.add(btnPoistaHarjoitus);
229 
230         panelNappulat.add(lblViestikentta, BorderLayout.CENTER);
231 
232         contentPane.add(splitPaneHakuJaHarjTiedot, BorderLayout.CENTER);
233         panelHakuJaHarjPVM.setMaximumSize(new Dimension(130, 32767));
234 
235         splitPaneHakuJaHarjTiedot.setLeftComponent(panelHakuJaHarjPVM);
236         panelHakuJaHarjPVM.setLayout(new BorderLayout(0, 0));
237         panelHakuJaSiskirj.setMinimumSize(new Dimension(150, 10));
238 
239         panelHakuJaHarjPVM.add(panelHakuJaSiskirj, BorderLayout.NORTH);
240         panelHakuJaSiskirj.setLayout(new BoxLayout(panelHakuJaSiskirj, BoxLayout.Y_AXIS));
241         editPanel.getEdit().setBackground(UIManager.getColor("ComboBox.disabledBackground"));
242         editPanel.getEdit().setEditable(false);
243         editPanel.setCaption("Nimi");
244         editPanel.setLabelWidth(25);
245         editPanel.setText("");
246 
247         panelHakuJaSiskirj.add(editPanel);
248         labelHaku.setAlignmentX(Component.CENTER_ALIGNMENT);
249         labelHaku.setHorizontalAlignment(SwingConstants.TRAILING);
250 
251         panelHakuJaSiskirj.add(labelHaku);
252 
253         panelHakuJaSiskirj.add(textField);
254         labelPVM.setAlignmentX(Component.CENTER_ALIGNMENT);
255         labelPVM.setHorizontalAlignment(SwingConstants.TRAILING);
256 
257         panelHakuJaSiskirj.add(labelPVM);
258 
259         panelHakuJaHarjPVM.add(scrollPanePVM, BorderLayout.CENTER);
260         listPVM.setModel(new AbstractListModel() {
261             /**
262              * 
263              */
264             private static final long serialVersionUID = 1L;
265             String[] values = new String[] {};
266             public int getSize() {
267                 return values.length;
268             }
269             public Object getElementAt(int index) {
270                 return values[index];
271             }
272         });
273 
274         scrollPanePVM.setViewportView(listPVM);
275         splitPaneHarjTiedotJaHarjVaihtoehdot.setPreferredSize(new Dimension(400, 25));
276 
277         splitPaneHakuJaHarjTiedot.setRightComponent(splitPaneHarjTiedotJaHarjVaihtoehdot);
278         panelHarjTiedot.setMinimumSize(new Dimension(270, 10));
279 
280         splitPaneHarjTiedotJaHarjVaihtoehdot.setLeftComponent(panelHarjTiedot);
281         panelHarjTiedot.setLayout(new BorderLayout(0, 0));
282         lblHarjoituksenTiedot.setMinimumSize(new Dimension(150, 14));
283         lblHarjoituksenTiedot.setMaximumSize(new Dimension(88888888, 14));
284 
285         panelHarjTiedot.add(lblHarjoituksenTiedot, BorderLayout.NORTH);
286         splitPaneHarjTiedot.setOrientation(JSplitPane.VERTICAL_SPLIT);
287 
288         panelHarjTiedot.add(splitPaneHarjTiedot, BorderLayout.CENTER);
289 
290         splitPaneHarjTiedot.setLeftComponent(panelHarjPerusTiedot);
291         panelHarjPerusTiedot.setLayout(new BoxLayout(panelHarjPerusTiedot, BoxLayout.X_AXIS));
292         verticalBoxPerusTiedot.setMaximumSize(new Dimension(32767, 32767));
293         verticalBoxPerusTiedot.setMinimumSize(new Dimension(10, 10));
294 
295         panelHarjPerusTiedot.add(verticalBoxPerusTiedot);
296         //verticalBoxPerusTiedot.setLayout(new BoxLayout(verticalBoxPerusTiedot, BoxLayout.X_AXIS));
297         editPanelHarjAlkuaika.setCaption("Alkamisaika");
298 
299         verticalBoxPerusTiedot.add(editPanelHarjAlkuaika);
300         editPanelHarjLoppuaika.setCaption("Loppumisaika");
301         verticalBoxPerusTiedot.add(editPanelHarjLoppuaika);
302         editPanelPaikkakunta.setCaption("Paikkakunta");
303         verticalBoxPerusTiedot.add(editPanelPaikkakunta);
304         editPanelSeura.setCaption("Seura");
305         verticalBoxPerusTiedot.add(editPanelSeura);
306         verticalBoxPerusTiedot.add(editPanelOpe);
307         editPanelOpe.setCaption("Opettaja");
308         editPanelOpe.setMaximumSize(new Dimension(2147483647, 20));
309         editPanelOpe.setLayout(new BoxLayout(editPanelOpe, BoxLayout.X_AXIS));
310 
311         splitPaneHarjTiedot.setRightComponent(scrollPaneHarjSisTiedot);
312 
313         scrollPaneHarjSisTiedot.setViewportView(verticalBox);
314         labelHarjSis_1.setAlignmentX(Component.CENTER_ALIGNMENT);
315 
316         verticalBox.add(labelHarjSis_1);
317 
318         verticalBox.add(scrollPane);
319         list.setModel(new AbstractListModel() {
320             /**
321              * 
322              */
323             private static final long serialVersionUID = 1L;
324             String[] values = new String[] {};
325             public int getSize() {
326                 return values.length;
327             }
328             public Object getElementAt(int index) {
329                 return values[index];
330             }
331         });
332 
333         scrollPane.setViewportView(list);
334         labelLisatietoja.setAlignmentX(Component.CENTER_ALIGNMENT);
335 
336         verticalBox.add(labelLisatietoja);
337 
338         verticalBox.add(scrollPane_1);
339         txtrHyvtReenitLopuksi.setFont(new Font("Verdana", Font.PLAIN, 12));
340 
341         scrollPane_1.setViewportView(txtrHyvtReenitLopuksi);
342 
343         listHarjVaihtoehdot.setMaximumSize(new Dimension(40, 100));
344         listHarjVaihtoehdot.setModel(new AbstractListModel() {
345             /**
346              * 
347              */
348             private static final long serialVersionUID = 1L;
349             String[] values = new String[] {};
350             public int getSize() {
351                 return values.length;
352             }
353             public Object getElementAt(int index) {
354                 return values[index];
355             }
356         });
357         splitPaneHarjTiedotJaHarjVaihtoehdot.setRightComponent(scrollPaneHarjVaihtoehdot);
358         scrollPaneHarjVaihtoehdot.setMaximumSize(new Dimension(50, 250));
359 
360         scrollPaneHarjVaihtoehdot.setViewportView(listHarjVaihtoehdot);
361     }
362 
363 
364     // Swing-actionit alkavat
365 
366 
367     private class SwingAction extends AbstractAction {
368         /**
369          * Action: Uuden harjoituksen lisääminen
370          */
371         private static final long serialVersionUID = 1L;
372         public SwingAction() {
373             putValue(NAME, "Uusi harjoitus");
374             putValue(SHORT_DESCRIPTION, "Lisää tästä uusi harjoitus.");
375         }
376         @SuppressWarnings({ "synthetic-access", "unchecked" })
377         public void actionPerformed(ActionEvent e) {
378             ks.uusiHarjoitus();
379             listPVM.setListData(ks.getHarjoitukset());
380         }
381     }
382     private class SwingAction_1 extends AbstractAction {
383         /**
384          * Action: Tallentaminen
385          */
386         private static final long serialVersionUID = 1L;
387         public SwingAction_1() {
388             putValue(NAME, "Tallenna");
389             putValue(SHORT_DESCRIPTION, "Tallenna harjoitus.");
390         }
391         @SuppressWarnings("synthetic-access")
392         public void actionPerformed(ActionEvent e) {
393             ks.tallenna();
394         }
395     }
396     private class SwingAction_2 extends AbstractAction {
397         /**
398          * Action: Valitun harjoituksen poistaminen
399          */
400         private static final long serialVersionUID = 1L;
401         public SwingAction_2() {
402             putValue(NAME, "Poista Harjoitus");
403             putValue(SHORT_DESCRIPTION, "Poistaa valitun harjoituksen. Poisto varmistetaan.");
404         }
405         @SuppressWarnings("synthetic-access")
406         public void actionPerformed(ActionEvent e) {
407             ks.poistaHarjoitus();
408         }
409     }
410     private class SwingAction_3 extends AbstractAction {
411         /**
412          * Action: Ohjelman lopettaminen
413          */
414         private static final long serialVersionUID = 1L;
415         public SwingAction_3() {
416             putValue(NAME, "Lopeta");
417             putValue(SHORT_DESCRIPTION, "Sulkee ohjelman");
418         }
419         public void actionPerformed(ActionEvent e) {
420             lopeta();
421         }
422     }
423     private class SwingAction_4 extends AbstractAction {
424         /**
425          * Action: Käyttäjän vaihtaminen
426          */
427         private static final long serialVersionUID = 1L;
428         public SwingAction_4() {
429             putValue(NAME, "Vaihda käyttäjää");
430             putValue(SHORT_DESCRIPTION, "Kirjaa nykyisen käyttäjän ulos ja avaa aloitusikkunan.");
431         }
432         @SuppressWarnings("synthetic-access")
433         public void actionPerformed(ActionEvent e) {
434             ks.uusiKayttaja();
435         }
436     }
437     private class SwingAction_5 extends AbstractAction {
438         /**
439          * Action: Tulostamisversion avaaminen
440          */
441         private static final long serialVersionUID = 1L;
442         public SwingAction_5() {
443             putValue(NAME, "Tulosta");
444             putValue(SHORT_DESCRIPTION, "Avaa dialogin, jossa on harjoituksen data tulostettavammassa muodossa.");
445         }
446         @SuppressWarnings("synthetic-access")
447         public void actionPerformed(ActionEvent e) {
448             ks.tulosta();
449         }
450     }
451     private class SwingAction_6 extends AbstractAction {
452         /**
453          * Action: Uuden sisällön lisääminen
454          */
455         private static final long serialVersionUID = 1L;
456         public SwingAction_6() {
457             putValue(NAME, "Uusi Sisältö");
458             putValue(SHORT_DESCRIPTION, "Lisää sisältölistaan uuden sisällön.");
459         }
460         @SuppressWarnings("synthetic-access")
461         public void actionPerformed(ActionEvent e) {
462             ks.lisaaUusiSisalto();
463         }
464     }
465     private class SwingAction_7 extends AbstractAction {
466         /**
467          * Action: Valitun sisällön poistaminen
468          */
469         private static final long serialVersionUID = 1L;
470         public SwingAction_7() {
471             putValue(NAME, "Poista Sisältö");
472             putValue(SHORT_DESCRIPTION, "Poistaa sisältölistasta valitun sisällön.");
473         }
474         @SuppressWarnings("synthetic-access")
475         public void actionPerformed(ActionEvent e) {
476             ks.poistaSisalto();
477         }
478     }
479     private class SwingAction_8 extends AbstractAction {
480         /**
481          * Action: Avaa ohjeet ohjelman käyttöön
482          */
483         private static final long serialVersionUID = 1L;
484         public SwingAction_8() {
485             putValue(NAME, "Apua");
486             putValue(SHORT_DESCRIPTION, "Ohjeita ohjelman käyttöön.");
487         }
488         @SuppressWarnings("synthetic-access")
489         public void actionPerformed(ActionEvent e) {
490             ks.ohjeita();
491         }
492     }
493     private class SwingAction_9 extends AbstractAction {
494         /**
495          * Action: Avaa tietoja ohjelmasta
496          */
497         private static final long serialVersionUID = 1L;
498         public SwingAction_9() {
499             putValue(NAME, "Tietoja");
500             putValue(SHORT_DESCRIPTION, "Tietoja ohjelmasta.");
501         }
502         @SuppressWarnings("synthetic-access")
503         public void actionPerformed(ActionEvent e) {
504             ks.about();
505         }
506     }
507 
508     // Muut metodit
509 
510     /**
511      * 
512      */
513     public void lopeta() {
514         processWindowEvent(new WindowEvent(this, WindowEvent.WINDOW_CLOSING));
515     }
516 
517 }
518