Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Заочники 2020-2021 / Лекция 6.ppt
Скачиваний:
63
Добавлен:
15.06.2021
Размер:
746.5 Кб
Скачать

Основы Java

МИЭТ, 2016

Лекция 6.

1. Графический интерфейс в Java (продолжение)

GUI в Java.

Лекция 6

Пример создания многооконного графического интерфейса

Рассматриваемые темы:

1.Создание меню

2.Создание фреймов (окон) внутри фрейма (окна) программы

3.Обработка событий внутри окон

4.Обработка событий между меню и окнами

5.Обработка событий между окнами

GUI в Java.

Лекция 6

Графическое представление рассматриваемого примера

GUI в Java.

Лекция 6

Структура пакетов и классов рассматриваемого примера

GUI в Java.

Лекция 6

Используемые классы и приемы для построения многооконного приложения

Класс рабочего стола JdesktopPane, который позволяет размещать и перемещать в себе фреймы (окна)

Класс «плавающего» фрейма JInternalFrame, который можно размещать внутри JdectopPane и перемещать там

Класс App со статическим ассоциативным массивом Frames, ключами которого являются «пути» к компонентам, а значениями ссылки на объекты компонентов

Deprecated

Ассоциативный массив с именем Application для хранения ссылок на объекты фреймов (окон), который доступен в каждом фрейме(окне), что позволяет легко обратиться из одного окна к другому.

GUI в Java.

Лекция 6

Классы приложения.

Start

— класс с main

App

— класс, содержащий данные о состоянии приложения

MainFrame

— Главный фрейм. (Jframe)

MainDesktopPane

— Главный рабочий стол. (JdesktopPane)

MainMenuBar

— Главное меню. (JmenuBar)

DrawFrame

— Фрейм графика. (JinternalFrame)

DrawGraf

— класс рисующий график внутри DrawFrame (JComponent)

GrafData

— класс с данными для построения графика

GrafDataTitle

— класс описания параметров графика, кроме пар x и y

DrawProperties

— Фрейм свойств. (JinternalFrame)

FrameAppStatus

— Фрейм строки состояния (JinternalFrame)

FileAction и EditAction

— класс с обработчиками пунктов меню. (AbstractAction)

FileMenu и EditMenu

— класс, связывающий пункты меню с обработчиками (JMenu)

GUI в Java.

Лекция 6

Пример создания многооконного графического интерфейса. Класс App.

public class App {

/*

*Frames содержит все графические объекты прлиожения для быстрого доступа к ним

*Ключ содержит имена окон в иерархической последовательности вложенности

*/

public static final Map <String, Object> Frames = new HashMap<String, Object>(); public static final Map <String, String> Keys = new HashMap<String, String>();

public static final String PFrame = "PFrame";

public static final String desktopPanePFrame = "desktopPanePFrame"; public static final String PPrefix = PFrame+"/"+desktopPanePFrame;

private static String StatusKey = PPrefix+"/FrameAppStatus/panel/scrollJTA/JTA";

//Метод добавляет запись в строку состояния public static final boolean putStatus(String t) {

if( !t.isEmpty() && Frames.get(StatusKey) != null ) { JTextArea JTA = (JTextArea) Frames.get(StatusKey); JTA.setText(JTA.getText()+"\n"+t);

return true; } else {

return false;

}

}

//Прототип метода обработки запроса

public static String getResponse(Map <String, Object> Request) { String Result = "";

return Result;

}

}

GUI в Java.

Лекция 6

Пример создания многооконного графического интерфейса. Класс Start.

public class Start implements MouseListener

{

public static void main(String[] args)

{

EventQueue.invokeLater(new Runnable()

{

public void run()

{

//Создаем массив объектов APPLICATIONS, который будет хранить ссылки на объекты программы Map <String, Object> Application = new HashMap();

//Создаем главное окно программы JFrame PFrame = new MainFrame(); PFrame.setTitle("GUI Java MIET"); PFrame.setName(App.PFrame); App.Frames.put(App.PFrame, PFrame);

//Создаем область рабочего стола в которую можно помещать фреймы JDesktopPane desktopPanePFrame = new MainDesktopPane(); desktopPanePFrame.setName(App.desktopPanePFrame); PFrame.add(desktopPanePFrame); PFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); PFrame.setSize(900, 620);

PFrame.setVisible(true); App.Frames.put(App.desktopPanePFrame, desktopPanePFrame);

//Создаем окно с графиком

JInternalFrame GFrame = new DrawFrame("GFrame"); GFrame.setTitle("GraphicTest"); GFrame.setSize(650, 550); GFrame.setMinimumSize(new Dimension(550, 550)); GFrame.setResizable(true); GFrame.setClosable(true);

GFrame.setDefaultCloseOperation(JInternalFrame.HIDE_ON_CLOSE ); GFrame.setVisible(true);

Application.put("GFrame", GFrame);

GUI в Java.

Лекция 6

Пример создания многооконного графического интерфейса. Класс Start.

//Создаем окно с настройками

JInternalFrame PropFrame = new DrawProperties(); Application.put("PropFrame", PropFrame);

//Создаем панель инструментов

MainToolBar MainToolBar = new MainToolBar(); JToolBar JTB = MainToolBar.getToolBar("Главная");

//Создаем окно с полем для отображения статуса JInternalFrame StatusFrame = new FrameAppStatus(); //Application.put("StatusFrame", StatusFrame);

//Создаем окно для экспериментов с многопоточностью //ThreedTest.App = Application;

JInternalFrame ThreedTest = new ThreedTest(); //Application.put("ThreedTest", ThreedTest);

//Создаем меню //MainMenuBar.setApp(Application);

JMenuBar MMB = new MainMenuBar(desktopPanePFrame);

//Добавляем в главное окно все ранее созданные компоненты desktopPanePFrame.add(GFrame); desktopPanePFrame.add(PropFrame); desktopPanePFrame.add(StatusFrame); desktopPanePFrame.add(ThreedTest); desktopPanePFrame.add(JTB);

PFrame.setJMenuBar(MMB);

GUI в Java.

Лекция 6

Пример создания многооконного графического интерфейса. Класс MainDesctopPane.

public class MainDesktopPane extends JDesktopPane implements KeyListener, MouseListener{

public MainDesktopPane() { super(); addKeyListener(this); addMouseListener(this); this.getActionMap();

this.getInputMap().put(KeyStroke.getKeyStroke((char) KeyEvent.KEY_PRESSED), ""); //this.getActionMap().put("help", someAction); //this.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_F1, 0),

"help");

//this.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_A, 0), "help");

}

//Метод добавляет компонент на MainDesktopPane и с ключём String в App.Frames public Component add(Component c, String key) {

Component lc;

lc = super.add(c);

if(!App.Frames.containsKey(key)) { //Добавляем в App.Frame только если там еще нет элемента с таким

ключем

App.Frames.put(key, c);

}

return lc;

}

public Component add(Component c) { Component lc;

lc = super.add(c);

if(!App.Frames.containsKey(App.PPrefix+"/"+c.getName())) { //Добавляем в App.Frame только если там еще нет элемента с таким ключем

App.Frames.put(App.PPrefix+"/"+c.getName(), c);

}

return lc;

}

@Override

public void mouseClicked(MouseEvent e) { // TODO Auto-generated method stub

System.out.println("MainDesktopPane > "+e.getX()+" "+e.getY()+" "+e.getXOnScreen()+" "+e.getYOnScreen());

}

Соседние файлы в папке Заочники 2020-2021