- •Основы Java
- •GUI в Java.
- •GUI в Java.
- •GUI в Java.
- •GUI в Java.
- •GUI в Java.
- •GUI в Java.
- •GUI в Java.
- •GUI в Java.
- •GUI в Java.
- •GUI в Java. Меню. Классы, используемые для создания меню
- •GUI в Java. Меню. Класс FileMenu
- •GUI в Java. Меню. Обработка событий. Класс FileAction
- •GUI в Java.
- •GUI в Java.
- •GUI в Java.
- •GUI в Java. Классы фреймов. DrawFrame.
- •GUI в Java. Класс настройки ячейки в GridBagLayout
- •GUI в Java. Классы фреймов. DrawFrame.
- •GUI в Java.
- •GUI в Java. Классы фреймов. DrawFrame. Обработка событий
- •GUI в Java. Классы фреймов. DrawFrame. Обработка событий
- •GUI в Java. Классы фреймов. DrawFrame. Обработка событий
- •GUI в Java.
- •GUI в Java.
- •GUI в Java. Классы фреймов. DrawProperties.
- •GUI в Java. Классы фреймов. DrawProperties. Лекция 6
- •GUI в Java. Классы фреймов. DrawProperties.
- •GUI в Java. DrawProperties. Обработка событий
- •GUI в Java. Способы определения компонента в событии
- •GUI в Java.
Основы 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());
}