Make the main window a singleton to permit to query it from other views and update...
[Persons_Comparator.git] / src / MainWindowsView.java
1 import javax.swing.*;
2 import javax.swing.text.DefaultEditorKit;
3 import java.awt.*;
4 import java.awt.event.ActionEvent;
5 import java.awt.event.ActionListener;
6 import java.awt.event.KeyEvent;
7 import java.util.ArrayList;
8
9 public class MainWindowsView extends JFrame {
10 private static MainWindowsView ourInstance = new MainWindowsView();
11 private PersonView currentPersonView;
12
13 private MainWindowsView() {
14 }
15
16 public void setMainWindowsView(String title, PersonView personView) {
17 this.currentPersonView = personView;
18 Container panel = getContentPane();
19 //Create and set up the window.
20 setTitle(title);
21 setSize(getCurrentPersonView().getDimension());
22 setLocationRelativeTo(null);
23 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
24
25 //Create menu
26 JMenuBar menuBar = createMenuBar();
27 setJMenuBar(menuBar);
28
29 //Get all Swing/AWT JPanel in the views and add them to the main panel.
30 ArrayList<Component> components = new ArrayList<>();
31 for (int i = 0; i < panel.getComponentCount(); i++) {
32 components.add(panel.getComponent(i));
33 }
34 for (Component component : components) {
35 panel.add(component);
36 }
37
38 panel.add(getCurrentPersonView().getNorthPanel(), BorderLayout.NORTH);
39 panel.add(getCurrentPersonView().getSouthPanel(), BorderLayout.SOUTH);
40 panel.add(getCurrentPersonView().getEastPanel(), BorderLayout.EAST);
41 panel.add(getCurrentPersonView().getWestPanel(), BorderLayout.WEST);
42 panel.add(getCurrentPersonView().getPersonPanel(), BorderLayout.CENTER);
43 }
44
45 public static MainWindowsView getInstance() {
46 return ourInstance;
47 }
48
49 public PersonView getCurrentPersonView() {
50 return currentPersonView;
51 }
52
53 /**
54 * Create menu that support cut/copy/paste.
55 */
56 private JMenuBar createMenuBar() {
57 JMenuItem menuItem;
58 JMenuBar menuBar = new JMenuBar();
59
60 JMenu fileMenu = new JMenu("File");
61
62 menuItem = new JMenuItem("Exit");
63 menuItem.addActionListener(new ActionListener() {
64 public void actionPerformed(ActionEvent e) {
65 System.exit(0);
66 }
67 });
68 fileMenu.add(menuItem);
69
70 JMenu editMenu = new JMenu("Edit");
71 editMenu.setMnemonic(KeyEvent.VK_E);
72
73 menuItem = new JMenuItem(new DefaultEditorKit.CutAction());
74 menuItem.setText("Cut");
75 menuItem.setMnemonic(KeyEvent.VK_T);
76 editMenu.add(menuItem);
77
78 menuItem = new JMenuItem(new DefaultEditorKit.CopyAction());
79 menuItem.setText("Copy");
80 menuItem.setMnemonic(KeyEvent.VK_C);
81 editMenu.add(menuItem);
82
83 menuItem = new JMenuItem(new DefaultEditorKit.PasteAction());
84 menuItem.setText("Paste");
85 menuItem.setMnemonic(KeyEvent.VK_P);
86 editMenu.add(menuItem);
87
88 menuBar.add(fileMenu);
89 menuBar.add(editMenu);
90 return menuBar;
91 }
92
93 /**
94 * Show the GUI. For thread safety,
95 * this method should be invoked from the
96 * event-dispatching thread.
97 */
98 public void showGUI() {
99 System.out.println("Created GUI on EDT? " +
100 SwingUtilities.isEventDispatchThread());
101 //Display the window.
102 this.pack();
103 this.setVisible(true);
104 }
105 }