-
Notifications
You must be signed in to change notification settings - Fork 202
Expand file tree
/
Copy pathMainApplicationFrame.java
More file actions
134 lines (111 loc) · 4.43 KB
/
MainApplicationFrame.java
File metadata and controls
134 lines (111 loc) · 4.43 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
package gui;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import javax.swing.*;
import log.Logger;
import java.beans.PropertyVetoException;
import java.io.*;
import java.util.Properties;
public class MainApplicationFrame extends JFrame
{
private final JDesktopPane desktopPane = new JDesktopPane();
public MainApplicationFrame() {
//Make the big window be indented 50 pixels from each edge
//of the screen.
int inset = 50;
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
setBounds(inset, inset,
screenSize.width - inset*2,
screenSize.height - inset*2);
setContentPane(desktopPane);
LogWindow logWindow = createLogWindow();
addWindow(logWindow);
GameWindow gameWindow = new GameWindow();
gameWindow.setSize(400, 400);
addWindow(gameWindow);
setJMenuBar(generateMenuBar());
setDefaultCloseOperation(EXIT_ON_CLOSE);
WindowStateManager.loadWindowStateFromFile(desktopPane);
}
protected LogWindow createLogWindow()
{
LogWindow logWindow = new LogWindow(Logger.getDefaultLogSource());
logWindow.setLocation(10,10);
logWindow.setSize(300, 800);
setMinimumSize(logWindow.getSize());
logWindow.pack();
Logger.debug("Протокол работает");
return logWindow;
}
protected void addWindow(JInternalFrame frame)
{
desktopPane.add(frame);
frame.setVisible(true);
}
private JMenuBar generateMenuBar()
{
JMenuBar menuBar = new JMenuBar();
JMenu lookAndFeelMenu = new JMenu("Режим отображения");
lookAndFeelMenu.setMnemonic(KeyEvent.VK_V);
lookAndFeelMenu.getAccessibleContext().setAccessibleDescription(
"Управление режимом отображения приложения");
{
JMenuItem systemLookAndFeel = new JMenuItem("Системная схема", KeyEvent.VK_S);
systemLookAndFeel.addActionListener((event) -> {
setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
this.invalidate();
});
lookAndFeelMenu.add(systemLookAndFeel);
}
{
JMenuItem crossplatformLookAndFeel = new JMenuItem("Универсальная схема", KeyEvent.VK_S);
crossplatformLookAndFeel.addActionListener((event) -> {
setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
this.invalidate();
});
lookAndFeelMenu.add(crossplatformLookAndFeel);
}
JMenu testMenu = new JMenu("Тесты");
testMenu.setMnemonic(KeyEvent.VK_T);
testMenu.getAccessibleContext().setAccessibleDescription(
"Тестовые команды");
{
JMenuItem addLogMessageItem = new JMenuItem("Сообщение в лог", KeyEvent.VK_S);
addLogMessageItem.addActionListener((event) -> {
Logger.debug("Новая строка");
});
testMenu.add(addLogMessageItem);
}
JMenuItem exitItem = new JMenuItem("Выход", KeyEvent.VK_E);
exitItem.addActionListener((event) -> {
WindowStateManager.saveWindowStateToFile(desktopPane);
UIManager.put("OptionPane.yesButtonText", "Да");;
UIManager.put("OptionPane.noButtonText", "Нет");
UIManager.put("OptionPane.cancelButtonText", "Извиняюсь!");
int result = JOptionPane.showConfirmDialog(this, "Вы уверены, что хотите выйти из приложения?", "Выход",
JOptionPane.YES_NO_CANCEL_OPTION);
if (result == JOptionPane.YES_OPTION) {
System.exit(0);
}
});
menuBar.add(lookAndFeelMenu);
menuBar.add(testMenu);
menuBar.add(exitItem);
return menuBar;
}
private void setLookAndFeel(String className)
{
try
{
UIManager.setLookAndFeel(className);
SwingUtilities.updateComponentTreeUI(this);
}
catch (ClassNotFoundException | InstantiationException
| IllegalAccessException | UnsupportedLookAndFeelException e)
{
// just ignore
}
}
}