Make the main window a singleton to permit to query it from other views and update...
[Persons_Comparator.git] / src / MainWindowsView.java
CommitLineData
60971873 1import javax.swing.*;
c281942a 2import javax.swing.text.DefaultEditorKit;
089fcbfc 3import java.awt.*;
416e35f7
JB
4import java.awt.event.ActionEvent;
5import java.awt.event.ActionListener;
c281942a 6import java.awt.event.KeyEvent;
089fcbfc 7import java.util.ArrayList;
60971873
JB
8
9public class MainWindowsView extends JFrame {
7add5cb9
JB
10 private static MainWindowsView ourInstance = new MainWindowsView();
11 private PersonView currentPersonView;
f1e9d6d2 12
7add5cb9
JB
13 private MainWindowsView() {
14 }
15
16 public void setMainWindowsView(String title, PersonView personView) {
17 this.currentPersonView = personView;
d252f672 18 Container panel = getContentPane();
60971873
JB
19 //Create and set up the window.
20 setTitle(title);
7add5cb9 21 setSize(getCurrentPersonView().getDimension());
089fcbfc 22 setLocationRelativeTo(null);
60971873
JB
23 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
24
416e35f7 25 //Create menu
c281942a 26 JMenuBar menuBar = createMenuBar();
416e35f7 27 setJMenuBar(menuBar);
416e35f7 28
3d9fdaf4 29 //Get all Swing/AWT JPanel in the views and add them to the main panel.
089fcbfc
JB
30 ArrayList<Component> components = new ArrayList<>();
31 for (int i = 0; i < panel.getComponentCount(); i++) {
3d9fdaf4 32 components.add(panel.getComponent(i));
089fcbfc
JB
33 }
34 for (Component component : components) {
35 panel.add(component);
36 }
60971873 37
7add5cb9
JB
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;
60971873
JB
51 }
52
c281942a
JB
53 /**
54 * Create menu that support cut/copy/paste.
55 */
476910ab 56 private JMenuBar createMenuBar() {
c281942a
JB
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
60971873
JB
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() {
d252f672
JB
99 System.out.println("Created GUI on EDT? " +
100 SwingUtilities.isEventDispatchThread());
60971873 101 //Display the window.
255d3354 102 this.pack();
60971873
JB
103 this.setVisible(true);
104 }
416e35f7 105}