Lektsia_2-13-Elementy_GIP_1 презентация

Содержание

Слайд 2

Для справки:
Standard Widget Toolkit, или SWT (произносится «свит») — библиотека с открытым исходным

кодом для разработки графических интерфейсов пользователя на языке Java.
Разработана фондом Eclipse, лицензируется под Eclipse Public License, одной из лицензий открытого ПО.
SWT не является самостоятельной графической библиотекой, а представляет собой кросс-платформенную оболочку для графических библиотек конкретных платформ, например, под Linux SWT использует библиотеку Gtk+. SWT написана на стандартной Java и получает доступ к OS-специфичным библиотекам через Java Native Interface, который рассматривается в качестве сильного средства, несмотря на то, что это не является чистой Java.
SWT — альтернатива AWT и Swing (Sun Microsystems) для разработчиков, желающих получить привычный внешний вид программы в данной операционной системе. Использование SWT делает Java-приложение более эффективным, но снижает независимость от операционной системы и оборудования, требует ручного освобождения ресурсов и в некоторой степени нарушает Sun-концепцию платформы Java.
Рассмотрение данной библиотеки выходит за рамки курса.

Слайд 3

javax.swing

Слайд 7

import java.awt.*; //Проект - Label 1_FlowLayout
import javax.swing.*;
1 public class GUI_LB1 extends JComponent {
2

private static void createAndShowGUI(){
3 JLabel l1, l2, l3;
4 JFrame frame = new JFrame("Элементы интерфейса. Метка");
5 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
6 Container myC = frame.getContentPane();
7 myC.setLayout (new FlowLayout (FlowLayout.LEFT, 10, 10));
8 l1 = new JLabel ("Hello! Просто текст");
9 l1.setForeground (Color.red); //цвет букв в метке l1
10 l1.setBackground (Color.black); //цвет фона в метке l1
11 l1.setOpaque(true); //непрозрачный фон в метке l1
12 Font f = new Font ("Serif", Font.BOLD, 24);
13 l1.setFont(f); //шрифт для l1
14 l2 = new JLabel ("А это - не просто текст!");
15 l3 = new JLabel ("Первая строка "+ "\n" +"Вторая строка");
16 //перевод строки будет проигнорирован

В строке 7 на панель контента фрейма установлен менеджер компоновки – объект класса FlowLayout.

Слайд 8

17 myC.add (l1); myC.add (l2); myC.add (l3);
18 frame.setSize(250,300);
19 //после запуска увеличьте ширину

окна,
20 //чтобы исследовать работу менеджера компоновки
21 frame.setLocation(10,10);
22 frame.setVisible(true);
23 }
24 public static void main (String[ ] args){
25 javax.swing.SwingUtilities.invokeLater(new Runnable(){
26 public void run(){createAndShowGUI();}});
27 }
28 }

Слайд 9

Был установлен менеджер компоновки:
myC.setLayout (new FlowLayout (FlowLayout.LEFT, 10, 10));

Меняем размеры окна.

Слайд 10

Изменим строку в программе:
myC.setLayout (new FlowLayout (FlowLayout.CENTER,10,10));

Меняем размеры окна.

Слайд 11

Менеджеры компоновки

Слайд 14

(

)

(выравнивается линия элементов). Это LEFT

Слайд 15

int getHgap () Получает горизонтальный зазор между компонентами и между компонентами и границами

контейнера.
void setVgap(int vgap) Устанавливает вертикальный зазор между компонентами и между компонентами и границами контейнера.
int getAlignment () Получает выравнивание для этого макета.
addLayoutComponent(String name, Component comp) Добавляет указанный компонент в планировку (размещение).
void removeLayoutComponent (Component comp) Удаляет указанный компонент из планировки.

Слайд 17

import java.awt.*; //Проект - Label 2_BorderLayout
import javax.swing.*;
public class GUI_LB2 extends JComponent {
private

static void createAndShowGUI(){
JLabel l1, l2, l3, l4, l5;
JFrame frame = new JFrame("Элементы интерфейса. Метка");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container myC = frame.getContentPane();
BorderLayout manager = new BorderLayout();
myC.setLayout (manager);
l1 = new JLabel ("Север");
l2 = new JLabel ("Запад");
l3 = new JLabel ("Восток");
l4 = new JLabel ("Юг");
l5 = new JLabel ("Центр");
l1.setForeground (Color.red); //цвет букв в метке l1
l1.setBackground (Color.black); //цвет фона в метке l1
l1.setOpaque(false); //прозрачный фон в метке l1

Слайд 18

Font f = new Font ("Serif", Font.BOLD, 24);
l1.setFont(f); l2.setFont(f);
l3.setFont(f);

l4.setFont(f);
l5.setFont(f);
myC.add (l1, BorderLayout.NORTH);
myC.add (l2, BorderLayout.WEST);
myC.add (l3, BorderLayout.EAST);
myC.add (l4, BorderLayout.SOUTH);
myC.add (l5, BorderLayout.CENTER);
frame.setSize(250,300);
frame.setLocation(10,10);
frame.setVisible(true);
}
public static void main (String[ ] args){
javax.swing.SwingUtilities.invokeLater(new Runnable(){
public void run(){createAndShowGUI();}});
}
}

Слайд 19

Обратите внимание на цвет фона в метке l1 («Север»). Был установлен черный, прозрачный.

Слайд 20

Изменим в предыдущей программе определение меток: //Проект - Label 3_BorderLayout_Center
l1 = new

JLabel ("Север", JLabel.CENTER);
l2 = new JLabel ("Запад", JLabel.CENTER);
l3 = new JLabel ("Восток", JLabel.CENTER);
l4 = new JLabel ("Юг", JLabel.CENTER);
l5 = new JLabel ("Центр", JLabel.CENTER);

Слайд 21

import java.awt.*; //Проект - 4_BorderLayout_с кнопками
import javax.swing.*;
public class GUI_But extends JComponent {
private

static void createAndShowGUI(){
JFrame frame = new JFrame("Элементы интерфейса. Кнопки");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container myC = frame.getContentPane();
myC.setLayout (new BorderLayout());
myC.add(new JButton("Кнопка"), BorderLayout.NORTH);
myC.add(new JButton("+"), BorderLayout.EAST);
myC.add(new JButton("-"), BorderLayout.WEST);
// попробуйте добавить вторую кнопку в ту же область:
//myC.add(new JButton("***"), BorderLayout.WEST);
myC.add(new JButton("Кнопка с длинной надписью"),
BorderLayout.SOUTH);
myC.add(new JButton("В ЦЕНТР!")); //область по умолчанию

Слайд 22

frame.setSize(250, 150);
frame.setLocation(10,10);
frame.setVisible(true);
}
public static void main (String[ ] args){


javax.swing.SwingUtilities.invokeLater(new Runnable(){
public void run(){createAndShowGUI();}});
} //запустите и исследуйте, как меняются границы областей
} // при растягивании окна

Слайд 23

Эксперименты:
1) Вместо «-» стало «***»,
2) Изменили размеры окна

Слайд 24

Создадим менеджер компоновки с помощью другого конструктора:
myC.setLayout (new BorderLayout(10,10));

//Проект - 5

BorderLayout_с кнопками и зазорами

Слайд 25

Проанализируйте, как меняются границы областей при изменении границ окна

Слайд 27

import java.awt.*; //Проект - Label 6_GridLayout
import javax.swing.*;
public class GUI_LB6 extends JComponent {
private

static void createAndShowGUI(){
JLabel [ ] MyLabs = new JLabel[6];
JFrame frame = new JFrame("Элементы интерфейса. Метка");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container myC = frame.getContentPane();
myC.setLayout (new GridLayout (2,3));
Font f = new Font ("Serif",Font.BOLD,24);
for (int i = 0; i < 6; i++){
MyLabs[i] = new JLabel("Метка " + i);
MyLabs[i].setFont(f);
myC.add(MyLabs[i]);
}

Слайд 28

frame.setSize(400,300);
frame.setLocation(10,10);
frame.setVisible(true);
}
public static void main (String[

] args){
javax.swing.SwingUtilities.invokeLater(new Runnable(){
public void run(){createAndShowGUI();}});
}
}

Слайд 29

Меняем размеры окна.

Минимальная ширина окна (меньше не делается).

В любом случае – таблица!

Слайд 31

Управляющие элементы ГИП

Слайд 34

При щелчке по кнопке возникает событие класса ActionEvent.
Слушателем события должен быть назначен объект

класса, реализующего интерфейс ActionListener.
Интерфейс ActionListener задает единственный метод:
public void actionPerformed (ActionEvent e) –
обработчик события класса ActionEvent.

Источник события – кнопка.
Событие ? Слушатель ? Обработчик

Слайд 39

1 import java.awt.*; //Проект - 7 GUI_кнопки
2 import javax.swing.*;
3 import java.awt.event.*;
4 public class

GUI_but extends JPanel
5 implements ActionListener{
6 protected JButton b1, b2, b3;
7 public GUI_but(){ //конструктор
8 b1 = new JButton ("Отключить среднюю кнопку");
9 b1.setMnemonic(KeyEvent.VK_D);
10 b1.setActionCommand("disable");
11 b1.setToolTipText("Щелкни по кнопке - " +
12 "отключишь среднюю кнопку");

Слайд 40

13 b2 = new JButton ("Средняя кнопка");
14 b2.setMnemonic(KeyEvent.VK_M);
15 b2.setActionCommand("средняя");
16 b2.setToolTipText("Нажми, и увидишь, что

получится");
17
18 b3 = new JButton ("Включить среднюю кнопку");
19 b3.setMnemonic(KeyEvent.VK_E);
20 b3.setActionCommand("enable");
21 b3.setEnabled(false);
22 b3.setToolTipText("Щелкни по кнопке - "+
23 "включишь среднюю кнопку");

Слайд 41

24 //добавление слушателя событий
25 b1.addActionListener(this);
26 b2.addActionListener(this);
27 b3.addActionListener(this);
28
29 // добавление кнопок на панель
30 add(b1);
31

add(b2);
33 add(b3);
34 } //конструктор

Слушателем событий кнопок назначен текущий объект, т.е. панель, на которую они установлены.

Слайд 42

35 public void actionPerformed (ActionEvent e){ //обработчик
36 if ("disable".equals(e.getActionCommand())){
37 System.out.println("Левая кнопка - Left

Button");
38 b1.setEnabled(false);
39 b2.setEnabled(false);
40 b3.setEnabled(true);
41 }
42 else if ("средняя".equals(e.getActionCommand())){
43 System.out.println("Средняя кнопка - Central Button");
44 }
45 else if ("enable".equals(e.getActionCommand())){
46 System.out.println("Правая кнопка - Right Button");
47 b1.setEnabled(true);
48 b2.setEnabled(true);
49 b3.setEnabled(false);
50 }
51 }
52 }

Обработчик событий – один на все три кнопки

Слайд 43

import java.awt.*;
import javax.swing.*;
public class MyFrame{
private static void createAndShowGUI(){
JFrame frame = new

JFrame("Элементы интерфейса");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
GUI_but pane = new GUI_but(); // создали панель с кнопками
Container myC = frame.getContentPane();
myC.setLayout(new FlowLayout(FlowLayout.LEFT,10,10));
myC.add(pane);
frame.setSize(700,100);
frame.setLocation(10,10);
frame.setVisible(true);
}
public static void main (String[ ] args){
javax.swing.SwingUtilities.invokeLater(new Runnable(){
public void run(){createAndShowGUI();}});
}
}

Слайд 44

Вместо щелчка по кнопке можно нажимать соответствующую комбинацию «горячих» клавиш, установленную методом setMnemonic:

+ (кнопка 1), + (кнопка 2),
+ (кнопка 3).

Слайд 45

Можно сделать кнопки более интересными ☺

Слайд 46

Для этого добавим в конструктор следующие операторы: //Проект - 7_1 GUI_кнопки
b1.setPreferredSize(new Dimension(300,300));


b1.setIcon(new ImageIcon("лошадь.gif"));
b1.setVerticalTextPosition(AbstractButton.CENTER);
b1.setHorizontalTextPosition(AbstractButton.LEFT);
b2.setPreferredSize(new Dimension(300,300));
b2.setIcon(new ImageIcon("динозавр.gif"));
b2.setVerticalTextPosition(AbstractButton.BOTTOM);
b2.setHorizontalTextPosition(AbstractButton.CENTER);
b3.setPreferredSize(new Dimension(300,300));
b3.setIcon(new ImageIcon("петух.gif"));
b3.setVerticalTextPosition(AbstractButton.TOP);
b3.setHorizontalTextPosition(AbstractButton.RIGHT);
// файлы изображений находятся в папке проекта

Слайд 47

Анонимные слушатели событий

Слайд 48

import java.awt.*; //Проект 7_2 GUI_кнопки_аноним_слуш
import javax.swing.*;
import java.awt.event.*;
public class GUI_but extends JPanel
/*implements

ActionListener – убрали!*/ {
protected JButton b1, b2, b3;
public GUI_but(){
b1 = new JButton ("Отключить среднюю кнопку");
b1.setMnemonic(KeyEvent.VK_D);
//b1.setActionCommand("disable"); // - можно не ставить команду на кнопку
b1.setToolTipText("Щелкни по кнопке - отключишь среднюю кнопку");
b2 = new JButton ("Средняя кнопка");
b2.setMnemonic(KeyEvent.VK_M);
//b2.setActionCommand("средняя"); //-можно не ставить команду на кнопку
b2.setToolTipText("Нажми, и увидишь, что получится");
b3 = new JButton ("Включить среднюю кнопку");
b3.setMnemonic(KeyEvent.VK_E);
//b3.setActionCommand("enable"); //-можно не ставить команду на кнопку
b3.setEnabled(false);
b3.setToolTipText("Щелкни по кнопке - включишь среднюю кнопку");

Внесены изменения только в класс GUI_but,
класс MyFrame не изменился.

Слайд 49

b1.addActionListener (new ActionListener() {
public void actionPerformed (ActionEvent e){
System.out.println ("Левая кнопка

- Left Button");
b1.setEnabled (false);
b2.setEnabled (false);
b3.setEnabled (true);
}});
b2.addActionListener (new ActionListener() {
public void actionPerformed (ActionEvent e){
System.out.println("Средняя кнопка - Central Button");
}});
b3.addActionListener (new ActionListener() {
public void actionPerformed (ActionEvent e){
System.out.println("Правая кнопка - Right Button");
b1.setEnabled(true);
b2.setEnabled(true);
b3.setEnabled(false);
}});
add(b1);
add(b2);
add(b3); } }

Используется анонимный (безымянный) класс, реализующий интерфейс ActionListener, ассоциированный с объектом этого класса.

Свой анонимный слушатель и, соответственно, его метод actionPerformed() теперь определен для каждой кнопки, поэтому необходимость в установке команд на кнопки и их анализе при возникновении события отпала (сравните данный проект с проектом 7 GUI_кнопки).

Слайд 52

Для справки:
DOM (от англ. Document Object Model — «объектная модель документа») — это

не зависящий от платформы и языка программный интерфейс, позволяющий программам и скриптам получить доступ к содержимому HTML, XHTML и XML-документов, а также изменять содержимое, структуру и оформление таких документов.
JTextField(Document doc, String text, int columns) — первый параметр конструктора задает модель данных.
Задание модели данных в конструкторе можно заменить вызовом метода setDocument(Document). Допустимо заменять не всю модель, а только шрифт — методом setFont(Font).

Слайд 54

При нажатии клавиши Enter возникает событие класса ActionEvent.
Слушателем события должен быть назначен объект

класса, реализующего интерфейс ActionListener.
Интерфейс ActionListener задает единственный метод:
public void actionPerformed (ActionEvent e) –
обработчик события класса ActionEvent.

Источник события – JTextField
(однострочное текстовое поле).
Событие ? Слушатель ? Обработчик

Слайд 57

1 import java.awt.*; //Проект - 8 GUI_текст_поле
2 import javax.swing.*;
3 import java.awt.event.*;
4 public class

GUI_edit extends JComponent
5 implements ActionListener{
6 JTextField tf1;
7 public GUI_edit(){ //конструктор
8 tf1 = new JTextField ("Это регистр", 20);
9 tf1.addActionListener (this);
10 }
11 public void actionPerformed (ActionEvent e){
12 System.out.println(tf1.getText());
13 tf1.setText("Наберите текст");
14 }
15 }

Слайд 58

import java.awt.*;
import javax.swing.*;
public class MyFrame{
private static void createAndShowGUI(){
GUI_edit a = new

GUI_edit();
JFrame frame = new JFrame(
"Элементы интерфейса - поле ввода");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container myC = frame.getContentPane();
myC.setLayout (new FlowLayout (FlowLayout.LEFT,10,10));
myC.add(a.tf1);
frame.setSize(700,100);
frame.setLocation(10,10);
frame.setVisible(true);
}
public static void main (String[ ] args){
javax.swing.SwingUtilities.invokeLater(new Runnable(){
public void run(){createAndShowGUI();}});
}
}

Слайд 59

После нажатия клавиши :

Слайд 60

После нажатия клавиши :

Слайд 63

1 import java.awt.*; // Проект - 9 GUI_два_текст_поля
2 import javax.swing.*;
3 import java.awt.event.*;
4 public

class GUI_edit2 extends JComponent
5 implements ActionListener{
6 JTextField tf1, tf2;
7 public GUI_edit2(){ //конструктор
8 tf1 = new JTextField ("Наберите текст1", 30);
9 tf1.addActionListener(this);
10 tf1.setActionCommand("первая");
11 tf2 = new JTextField ("Наберите текст2", 30);
12 tf2.addActionListener(this);
13 tf2.setActionCommand("вторая");
14 tf2.setEditable(false);
15 }

Слайд 64

16 public void actionPerformed (ActionEvent e){ //обработчик
17 if("первая".equals(e.getActionCommand())){
18 System.out.println("Первая: " + tf1.getText());
19 tf1.setText("Наберите

текст во втором поле");
20 tf1.setEditable(false);
21 tf2.setEditable(true);
22 tf2.requestFocus(); //чтобы появился текстовый курсор
23 tf2.setText("");
24 }
25 else if("вторая".equals(e.getActionCommand())){
26 System.out.println("Вторая: " + tf2.getText());
27 tf2.setText("Наберите текст в первом поле");
28 tf1.setEditable(true);
29 tf2.setEditable(false);
30 tf1.requestFocus(); //чтобы появился текстовый курсор
31 tf1.setText("");
32 }
33 }
34 }

Слайд 65

import java.awt.*;
import javax.swing.*;
public class MyFrame{
private static void createAndShowGUI(){
GUI_edit2 a=new GUI_edit2();
JFrame

frame = new JFrame("Элементы интерфейса - "+
"поле ввода");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container myC=frame.getContentPane();
myC.setLayout(new FlowLayout(FlowLayout.LEFT,10,10));
myC.add(a.tf1);
myC.add(a.tf2);
frame.setSize(700,100);
frame.setLocation(10,10);
frame.setVisible(true);
}
public static void main (String[ ] args){
javax.swing.SwingUtilities.invokeLater(new Runnable(){
public void run(){createAndShowGUI();}});
}}

Слайд 66

После нажатия клавиши :

Набираем текст в первом поле:

Слайд 67

После нажатия клавиши :

Имя файла: Lektsia_2-13-Elementy_GIP_1.pptx
Количество просмотров: 19
Количество скачиваний: 0