Rearrange code.
[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 static MainWindowsView getInstance() {
17 return ourInstance;
18 }
19
20 public void setMainWindowsView(String title, PersonView personView) {
21 this.currentPersonView = personView;
22 Container panel = getContentPane();
23 //Create and set up the window.
24 setTitle(title);
25 setSize(getCurrentPersonView().getDimension());
26 setLocationRelativeTo(null);
27 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
28
29 //Create menu
30 JMenuBar menuBar = createMenuBar();
31 setJMenuBar(menuBar);
32
33 //Get all Swing/AWT JPanel in the views and add them to the main panel.
34 ArrayList<Component> components = new ArrayList<>();
35 for (int i = 0; i < panel.getComponentCount(); i++) {
36 components.add(panel.getComponent(i));
37 }
38 for (Component component : components) {
39 panel.add(component);
40 }
41
42 panel.add(getCurrentPersonView().getNorthPanel(), BorderLayout.NORTH);
43 panel.add(getCurrentPersonView().getSouthPanel(), BorderLayout.SOUTH);
44 panel.add(getCurrentPersonView().getEastPanel(), BorderLayout.EAST);
45 panel.add(getCurrentPersonView().getWestPanel(), BorderLayout.WEST);
46 panel.add(getCurrentPersonView().getPersonPanel(), BorderLayout.CENTER);
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 }