Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions robots/src/gui/Listener.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package gui;

import java.awt.event.WindowAdapter;
import java.awt.event.WindowListener;

public class Listener extends WindowAdapter {

}
110 changes: 74 additions & 36 deletions robots/src/gui/MainApplicationFrame.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,11 @@
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.*;

import log.Logger;

Expand All @@ -25,7 +20,18 @@
public class MainApplicationFrame extends JFrame
{
private final JDesktopPane desktopPane = new JDesktopPane();


private void confirmExit() {
int result = JOptionPane.showConfirmDialog(this,
"Вы действительно хотите выйти?",
"Подтверждение выхода",
JOptionPane.YES_NO_OPTION);
if (result == JOptionPane.YES_OPTION) {
dispose();
System.exit(0);
}
}

public MainApplicationFrame() {
//Make the big window be indented 50 pixels from each edge
//of the screen.
Expand All @@ -46,7 +52,13 @@ public MainApplicationFrame() {
addWindow(gameWindow);

setJMenuBar(generateMenuBar());
setDefaultCloseOperation(EXIT_ON_CLOSE);
setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e){
confirmExit();
}
});
}

protected LogWindow createLogWindow()
Expand All @@ -68,12 +80,12 @@ protected void addWindow(JInternalFrame frame)

// protected JMenuBar createMenuBar() {
// JMenuBar menuBar = new JMenuBar();
//
//
// //Set up the lone menu.
// JMenu menu = new JMenu("Document");
// menu.setMnemonic(KeyEvent.VK_D);
// menuBar.add(menu);
//
//
// //Set up the first menu item.
// JMenuItem menuItem = new JMenuItem("New");
// menuItem.setMnemonic(KeyEvent.VK_N);
Expand All @@ -82,7 +94,7 @@ protected void addWindow(JInternalFrame frame)
// menuItem.setActionCommand("new");
//// menuItem.addActionListener(this);
// menu.add(menuItem);
//
//
// //Set up the second menu item.
// menuItem = new JMenuItem("Quit");
// menuItem.setMnemonic(KeyEvent.VK_Q);
Expand All @@ -91,52 +103,78 @@ protected void addWindow(JInternalFrame frame)
// menuItem.setActionCommand("quit");
//// menuItem.addActionListener(this);
// menu.add(menuItem);
//
//
// return menuBar;
// }
private JMenuBar generateMenuBar()

private void addSystemLookAndFeel(JMenu lookAndFeelMenu)
{
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);
}
}

{
private void addCrossplatformLookAndFeel(JMenu lookAndFeelMenu)
{
JMenuItem crossplatformLookAndFeel = new JMenuItem("Универсальная схема", KeyEvent.VK_S);
crossplatformLookAndFeel.addActionListener((event) -> {
setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
this.invalidate();
});
lookAndFeelMenu.add(crossplatformLookAndFeel);
}
}

private void addLogMessageItem(JMenu testMenu)
{
JMenuItem addLogMessageItem = new JMenuItem("Сообщение в лог", KeyEvent.VK_S);
addLogMessageItem.addActionListener((event) -> {
Logger.debug("Новая строка");
});
testMenu.add(addLogMessageItem);
}

private void addExitLookAndFeel(JMenu exitMenu)
{
JMenuItem addLogMessageItem = new JMenuItem("Завершение работы программы", KeyEvent.VK_S);
addLogMessageItem.addActionListener((event) -> {
confirmExit();
});
exitMenu.add(addLogMessageItem);
}

private JMenuBar generateMenuBar()
{
JMenuBar menuBar = new JMenuBar();

JMenu lookAndFeelMenu = new JMenu("Режим отображения");
lookAndFeelMenu.setMnemonic(KeyEvent.VK_V);
lookAndFeelMenu.getAccessibleContext().setAccessibleDescription(
"Управление режимом отображения приложения");

addSystemLookAndFeel(lookAndFeelMenu);

addCrossplatformLookAndFeel(lookAndFeelMenu);

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);
}

addLogMessageItem(testMenu);

JMenu exitMenu = new JMenu("Выход");
exitMenu.setMnemonic(KeyEvent.VK_T);
exitMenu.getAccessibleContext().setAccessibleDescription(
"Меню выхода");

addExitLookAndFeel(exitMenu);

menuBar.add(lookAndFeelMenu);
menuBar.add(testMenu);
menuBar.add(exitMenu);
return menuBar;
}

Expand Down
6 changes: 6 additions & 0 deletions robots/src/gui/RobotsProgram.java
Original file line number Diff line number Diff line change
@@ -1,13 +1,19 @@
package gui;

import java.awt.Frame;
import java.util.Locale;

import javax.swing.SwingUtilities;
import javax.swing.UIManager;

public class RobotsProgram
{
public static void main(String[] args) {
UIManager.put("OptionPane.yesButtonText", "Да");
UIManager.put("OptionPane.noButtonText", "Нет");
UIManager.put("OptionPane.okButtonText", "OK");
UIManager.put("OptionPane.cancelButtonText", "Отмена");
UIManager.put("OptionPane.titleText", "Подтверждение");
try {
UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel");
// UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
Expand Down
13 changes: 5 additions & 8 deletions robots/src/log/LogWindowSource.java
Original file line number Diff line number Diff line change
Expand Up @@ -49,19 +49,16 @@ public void append(LogLevel logLevel, String strMessage)
{
LogEntry entry = new LogEntry(logLevel, strMessage);
m_messages.add(entry);
LogChangeListener [] activeListeners = m_activeListeners;
if (activeListeners == null)
if(m_messages.size() > m_iQueueLength)
m_messages.removeFirst();
if (m_activeListeners == null)
{
synchronized (m_listeners)
{
if (m_activeListeners == null)
{
activeListeners = m_listeners.toArray(new LogChangeListener [0]);
m_activeListeners = activeListeners;
}
m_activeListeners = m_listeners.toArray(new LogChangeListener [0]);
}
}
for (LogChangeListener listener : activeListeners)
for (LogChangeListener listener : m_activeListeners)
{
listener.onLogChanged();
}
Expand Down