- •Основы 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.
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); |
|
} |
|
} |
|
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» показывается текст «Текст по умолчанию»