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

GUI в Java. Меню. Классы, используемые для создания меню

Лекция 6

JmenuBar — содержит все пункты меню

JMenu — cодержит пункты меню конкретной «ветки»

JMenuItem — пункт меню

Для удобства создаем класс MainMenu — расширяющий JMenuBar в котором будут выполняться все операции создания главного меню. Создание каждой ветки меню

также вынесем в отдельные классы.

public class MainMenuBar extends JMenuBar { private JDesktopPane JDP;

MainMenuBar() { super();

FileMenu FileMenu = new FileMenu("File"); this.add(FileMenu);

}

MainMenuBar(JDesktopPane jdp) { super();

this.JDP = jdp;

FileMenu FileMenu = new FileMenu("File", jdp);

this.add(FileMenu); //Для нескольких пунктов будет несколько new и add

}

}

В коде метода run() класса Start пишем:

JMenuBar MainMenuBar = new MainMenuBar(desktopPanePFrame);

PFrame.setJMenuBar(MainMenuBar);

GUI в Java. Меню. Класс FileMenu

Лекция 6

public class FileMenu extends javax.swing.JMenu {

 

private JDesktopPane JDP;

 

public FileMenu(String StartName) {

 

super(StartName); //Это имя первого пункта меню в колонке

 

makeMenu();

 

this.JDP = null;

 

}

 

public FileMenu(String StartName, JDesktopPane jdp) {

 

super(StartName); //Это имя первого пункта меню в колонке

 

this.JDP = jdp;

 

makeMenu();

 

}

 

private void makeMenu() {

 

JMenuItem Punkt1 = new JMenuItem("Open GraphicTest");

 

JMenuItem Punkt2 = new JMenuItem("Open PropertiesTest");

 

//Привязываем к пунктам клавиатурные сокращения

 

Punkt1.setAccelerator(KeyStroke.getKeyStroke("ctrl G"));

 

Punkt2.setAccelerator(KeyStroke.getKeyStroke("ctrl P"));

 

this.add(Punkt1); this.add(Punkt2); //Добавляем пункты

 

// Привязываем к пунктам обработчики событий FileAction

 

Punkt1.addActionListener(new FileAction("Open GraphicTest", this.JDP));

 

Punkt2.addActionListener(new FileAction("Open PropertiesTest", this.JDP));

 

this.addSeparator(); //Добавляем разделительную линию

 

JMenu PunktTestSub = new JMenu("Тест подменю");

 

this.add(PunktTestSub); //Добавляем подменю в меню

 

JMenuItem PunktTestSub_Punkt1 = new JMenuItem("Первый пункт");

 

JMenuItem PunktTestSub_Punkt2 = new JMenuItem("Второй пункт");

 

PunktTestSub.add(PunktTestSub_Punkt1);

 

PunktTestSub.add(PunktTestSub_Punkt2);

 

JMenuItem Punkt4 = new JMenuItem("Test");

 

Punkt4.setEnabled(false);

 

this.add(Punkt4);

 

}

 

}

 

PropertiesTest" ) {
}
}

GUI в Java. Меню. Обработка событий. Класс FileAction

Лекция 6

public class FileAction extends AbstractAction {

private JDesktopPane JDP; //Для работы с объектами рабочего стола private String PunktMenuName;

//public static Map <String, Object> App;

public FileAction(String name) { super(name);

this.JDP = null; this.PunktMenuName = name;

}

public FileAction(String name, JDesktopPane jdp) { super(name);

this.JDP = jdp; this.PunktMenuName = name;

}

@Override

public void actionPerformed(ActionEvent arg0) { // TODO Auto-generated method stub

if( this.JDP != null ) {

//Выводм данные в консоль для контроля System.out.println(getValue(Action.NAME)

+" selected "

+this.JDP.getName()

); //Делаем видимыми соответствующие фреймы

for(Component test: this.JDP.getComponents()) { System.out.println("Component> "+test.getName());

if( test.getName() == "GFrame" && this.PunktMenuName == "Open GraphicTest" ) { test.setVisible(true);

}

if( test.getName() == "DrawProperties" && this.PunktMenuName == "Open

test.setVisible(true);

}

if( this.PunktMenuName == "Open Status" && test.getName() == "FrameAppStatus" ) { test.setVisible(true);

}

GUI в Java.

Лекция 6

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

GUI в Java.

Лекция 6

Окно GraphicTest — скрыто. Его можно открыть нажав на пункт меню «Open GraphicTest» или комбинацией клавиш Ctrl+G

GUI в Java.

Лекция 6

Демонстрация раскрытия меню

GUI в Java. Классы фреймов. DrawFrame.

Лекция 6

public class DrawFrame extends JInternalFrame implements ActionListener

 

{

 

private JLabel Status;

 

private JPanel panel;

 

private JButton openGraf;

 

private JButton closeGraf;

 

private DrawGraf DG;

 

public DrawFrame() {

//Формируем заголовок-описание графика

GrafDataTitle GTitle = new GrafDataTitle("Проверка","",0,0,0,0,"ед","нс");

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

...

//Создаем панель содержимого для размещения элементов panel = new JPanel();

//Назначаем менеджера компоновки для размещения компонентов GridBagLayout layout = new GridBagLayout(); panel.setLayout(layout);

//DrawGraf Расширяет JСomponent и содержит код рисования графика

DG = new DrawGraf(new GrafData(GTitle,X,Y),true,false,new Color(255,0,0)); DG.setPosition(500, 400, 50, 50, 400, 300);

DG.setBorder((Border) new CompoundBorder(new EmptyBorder(0,0,0,0), new TitledBorder("График")));

DG.setName("График");

//Создаем ячейку для графика с помощью вспомогательного класса GBC Расширяющего класс GridBagConstrains

GridBagConstraints contrDG = new GBC(1,1,2,1,1,1,GridBagConstraints.NORTHWEST);

DG.setMinimumSize(new Dimension(500,400)); panel.add(DG, contrDG);

GUI в Java. Класс настройки ячейки в GridBagLayout

Лекция 6

Данный класс возвращает объект, используемый для задания местопложения компонента в макете GridBagLayout

public class GBC extends GridBagConstraints {

public GBC(

int gridx, int gridy,

int gridwidth, int gridheight, double weightx, double weighty, int anhor

) {

super();

this.gridx = gridx; //номер начального столбца this.gridy = gridy; //номер начальной строки

this.gridwidth = gridwidth; //количество ячеек занимаемых по горизонтали this.gridheight = gridheight; //количество ячеек, занимаемых по вертикали this.weightx = weightx; //вес при увеличении ячейки в размерах this.weighty = weighty; //вес при увеличении ячейки в размерах this.anchor = anhor; //выравнивание в ячейке

}

}

GUI в Java. Классы фреймов. DrawFrame.

Лекция 6

//Создаем кнопку показать график

openGraf = new JButton("Показать график"); openGraf.setName("openGraf"); openGraf.setActionCommand("openGraf");

//имя openGraf передается в событие и используется для определения действия

openGraf.addActionListener(this);

panel.add(openGraf, new GBC(1,2,1,1,0,0,GridBagConstraints.NORTHWEST));

//Создаем кнопку скрыть график

closeGraf = new JButton("Скрыть график"); closeGraf.setName("closeGraf"); closeGraf.setActionCommand("closeGraf"); closeGraf.addActionListener(this);

panel.add(closeGraf, new GBC(2,2,1,1,0,0,GridBagConstraints.NORTHWEST));

//Создаем метку для отображения состояний Status = new JLabel("Пока пусто"); Status.setName("Status"); Status.setToolTipText("Состояние");

Status.setBorder((Border) new CompoundBorder(new EmptyBorder(10,0,10,10), new TitledBorder("Статус")));

panel.add(Status, new GBC(1,3,2,1,1,1,GridBagConstraints.NORTHWEST));

getContentPane().add(panel); openGraf.setVisible(false);

GUI в Java.

Лекция 6

Во фрейме «DrawProperties» показывается текст «Текст по умолчанию»

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