- •Лекция 5. Графический пользовательский интерфейс
- •5.1. Библиотека Swing
- •5.1.1. Библиотеки для создания графического интерфейса
- •5.1.2. Анонимные вложенные классы
- •5.1.3. Интерфейс Runnable
- •5.1.4. Использование библиотеки Swing
- •5.2. Окна верхнего уровня
- •5.2.1. Класс jFrame
- •5.3. Рисование в окне
- •5.3.1. Особенности рисования в классах ComponentиJComponent
- •5.3.2. Вычисление области рисования
- •5.3.3. Класс Graphics
- •5.3.4. Класс Color.
- •5.3.5. Класс Font.
- •5.4. Скроллинг.
- •5.4.1. Класс jScrollPane.
Лекция 5. Графический пользовательский интерфейс
5.1. Библиотека Swing
5.1.1. Библиотеки для создания графического интерфейса
AWT(AbstractWindowToolkit) – Платформено-зависимый графический интерфейс.
Swing– Платформено-независимый графический интерфейс.
Все классы библиотеки Swingрасположены в пакетеjavax.swing. БиблиотекаSwingявляется надстройкой над библиотекойAWTи предоставляет возможность создания платформено-независимого пользовательского интерфейса.
5.1.2. Анонимные вложенные классы
В библиотеках AWTиSwingактивно используются анонимные вложенные классы. Эти классы не имеют имени и могут определяться внутри других классов и выражений. Анонимный вложенный класс может быть создан на основе класса-прародителя или реализовывать интерфейс.
Пример:
public class Example {
public static void main(String args[]) {
// Обычный экземпляр объекта Object
System.out.println(new Object());
// Экземпляр анонимного класса,
// унаследованного от Object
Object o = new Object() {
public String toString() {
return "Анонимный класс #1";
}
};
System.out.println(o);
// Экземпляр анонимного класса,
// унаследованного от Object,
// созданный внутри выражения
System.out.println(new Object() {
public String toString() {
return "Анонимный класс #2";
}
});
}
}
5.1.3. Интерфейс Runnable
Интерфейс Runnableпредназначен для реализации потоков выполнения вJava. Он содержит единственный методvoidrun(), который вызывается при запуске потока.
public interface Runnable {
public void run();
}
5.1.4. Использование библиотеки Swing
Все действия с библиотекой Swingдолжны выполняться в потоке выполнения обработки событий (Event Dispatch Thread). Для добавления своего кода в поток обработки событий предназначен статический метод EventQueue.invokeLater(Runnable), принимающий в качестве аргумента экземпляр класса, реализующего интерфейсRunnable.
Пример:
import java.awt.*;
import javax.swing.*;
public class Example {
public static void main(String args[]) {
EventQueue.invokeLater(new Runnable() {
public void run() {
// Использование библиотеки Swing
}
});
}
}
5.2. Окна верхнего уровня
5.2.1. Класс jFrame
Класс JFrameпредставляет собой окно верхнего уровня, имеющее заголовок, рамку, кнопки закрытия, сворачивания и распахивания.
Таблица 5.1. Основные конструкторы класса JFrame.
Конструктор |
Пример |
Описание |
JFrame() |
JFrame frame = new JFrame(); |
Конструктор по умолчанию, создаёт пустое окно. |
JFrame(String title) |
JFrame frame = new JFrame(“Заголовок”); |
Создаёт пустое окно с заголовком title. |
Таблица 5.2. Некоторые методы класса JFrame.
Метод |
Описание |
int getDefaultCloseOperation() void setDefaultCloseOperation(int operation) |
Получить или установить действие, производимое, когда пользователь нажимает кнопку закрытия окна. |
void setLayout(LayoutManager manager) |
Установить менеджер компоновки окна. |
Таблица 5.3. Некоторые методы класса Component.
Метод |
Описание |
voidaddKeyListener(KeyListener l) |
Добавляет новый обработчик событий клавиатуры. |
void addMouseListener(MouseListener l) |
Добавляет новый обработчик событий нажатия кнопок мыши. |
void addMouseMotionListener (MouseMotionListener l) |
Добавляет новый обработчик событий перемещения указателя мыши. |
Color getBackground() void setBackground(Color c) |
Возвращает или устанавливает цвет фона. |
Color getForeground() void setForeground(Color c) |
Возвращает или устанавливает цвет переднего плана. |
int getHeight() |
Возвращает высоту. |
int getWidth() |
Возвращает ширину. |
int getX() |
Возвращает координату x. |
int getY() |
Возвращает координату y. |
voidrepaint() |
Перерисовывает окно. |
void repaint(int x, int y, int width, int height) |
Перерисовывает участок окна. |
void setBounds(int x, int y, int width, int height) |
Изменяет размер или перемещает окно, путём установки новых границ. |
void setSize(int width, int height) |
Устанавливает ширину и высоту. |
void setVisible(boolean b) |
Показывает или скрывает окно. |
Таблица 5.4. Некоторые методы класса Container.
Метод |
Описание |
Component add(Component comp) |
Добавляет компонент к контейнеру |
Component findComponentAt(int x, int y) |
Возвращает компонент, находящийся в заданной точке |
Insets getInsets() |
Возвращает отступы контейнера |
void remove(Component comp) |
Удаляет компонент из контейнера |
void removeAll() |
Удаляет все компоненты из контейнера |
Пример:
import java.awt.*;
import javax.swing.*;
public class Window {
public static void main(String args[]) {
EventQueue.invokeLater(new Runnable() {
public void run() {
JFrame frame =
new JFrame("Пример окна верхнего уровня");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 200);
frame.setVisible(true);
}
});
}
}
Удобно создавать окно приложение путём расширения базового класса JFrame.
Пример:
import java.awt.*;
import javax.swing.*;
public class ForegroundWindow extends JFrame {
public ForegroundWindow() {
super("Пример окна верхнего уровня");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(300, 200);
setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
new ForegroundWindow().setVisible(true);
}
});
}
}