Графические приложения на Java
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

n Кроссплатформенное графическое приложение?..

n Abstract Window Toolkit (AWT)

l Компоненты являются
компонентами ОС

l Большое количество native-кода

l Отображение изменяется
при смене ОС

l Класс java . awt .Component
определяет базовую
функциональность компонентов

 





Иерархия классов AWT

 

Проблемы AWT

n Сходные элементы в различных ОС могут иметь некоторые различия

n ОС часто имеют элементы GUI, отсутствующие в других ОС

n Использование native-методов в AWT приводит к возникновению ошибок на конкретных платформах

 

Технология Swing

n Элементы GUI отрисовываются в пустых окнах

n «Нативные» функции используются только для вывода окна, отрисовки и получения информации о действиях пользователя

n Набор элементов GUI более широк, чем в AWT, и может быть еще расширен

n Сильная привязка к «нативным» методам отсутствует, что снижает вероятность возникновения ошибок

n Отображение на различных платформах единообразно

 

Иерархия классов

 

Иерархия классов Пакет javax . swing

 

Вопрос 74 Отрисовка графических компонентов. Двойная буфферизация. Pluggable look and feel. 8-17 Лекция Основы создания графических приложений.

 

Отрисовка компонентов

n Отрисовка производится в методе paintComponent ()

n Запрос на перерисовку

l public void repaint()

l public void repaint(long tm)

l public void repaint(int x, int y, int width, int height)

l public void repaint(long tm, int x, int y,
               int width, int height)

class NotHelloWorldPanel extends JPanel {

public void paintComponent(Graphics g) {

super.paintComponent(g);

g.drawString("Not a Hello, World program", MESSAGE_X, MESSAGE_Y);

}

public static final int MESSAGE_X = 75;

public static final int MESSAGE_Y = 100;

}

 


Работа с графикой

n java.awt.Graphics

l Базовый класс, предназначенный для рисования в контекстах компонентов, в изображениях в памяти и т.д.

l Предлагает простые средства рисования:
void drawArc(int x, int y, int width, int height,
int startAngle, int arcAngle)
void drawString(String str, int x, int y)
и т.д.

n java.awt.Graphics2D

l Класс-наследник класса java . awt . Graphics, обеспечивающий большую функциональность

l работа с 2D-сценой

l java . awt . geom .*
Содержит набор классов работы с графическими примитивами

 






Работа с цветом

n Класс java.awt.Color

n Константы Color.BLUE, Color.RED, …

n Покомпонентные  конструкторы Color(float r,   float g, float b, float a)

Color(ColorSpace cspace, float[] components, float alpha)

n Методы получения параметров цвета getRed (), getTransparency (), …

 

Работа со шрифтами

n Класс java.awt.Font

l Константы

l Конструкторы
Font(String name, int style, int size)

l Методы модификации и получения параметров шрифта

l Класс java.awt.FontMetrics

l Содержит методы определения геометрических характеристик шрифтов

 


Двойная буферизация

n В целях экономии времени на перерисовку логично запоминать однажды нарисованный статичный объект как рисунок в памяти

n При использовании Swing для этого не надо предпринимать дополнительных действий по выделению памяти и.д.

n Используется т.н. механизм «двойной буферизации», реализующий сохранение информации на уровне механизмов отрисовки

n Для одного участка «видимой области» приложения используется не более одного изображения-буфера

 

Двойная буферизация

Методы класса JComponent

n setDoubleBuffered( boolean aFlag )
Устанавливает, буферизует ли объект свой вывод

n boolean isDoubleBuffered()
Возвращает булевское значение, показывающее, используется ли двойная буферизация, или нет

 



Pluggable Look And Feel

n Программе можно придать различный вид, изменив «стиль» отрисовки компонентов

l Внешний вид программы может изменяться во время исполнения

l Перерисовка должна вызываться принудительно

n Есть разработанные «стили» для базовых платформ

n Существует возможность создания собственных «стилей»

String s;

switch (value) {

case 0: s = "javax.swing.plaf.metal.MetalLookAndFeel";

     break;

case 1: s = "com.sun.java.swing.plaf.motif.MotifLookAndFeel";

     break;

case 2: s = "com.sun.java.swing.plaf.windows.WindowsLookAndFeel";

     break;

default: s = UIManager.getSystemLookAndFeelClassName();

}

UIManager.setLookAndFeel(s);

SwingUtilities.updateComponentTreeUI(getContentPane());

 

Вопрос 75 Оконные приложения, меню. Менеджеры компоновки. 18-21 Лекция Основы создания графических приложений.

 

Оконные приложения в Swing

n Используется класс javax . swing . JFrame

n Содержимое окна находится на панели, ссылку на которую можно получить вызовом  метода getContentPane ()

n Параметрами окна можно управлять

 

Пример оконного приложения

import java.awt.*;

import javax.swing.*;

public class CenteredFrameTest {

public static void main(String[] args) {

CenteredFrame frame = new CenteredFrame();

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.setVisible(true);

}

}

class CenteredFrame extends JFrame {

public CenteredFrame() {

Toolkit kit = Toolkit.getDefaultToolkit();

Dimension screenSize = kit.getScreenSize();

int screenHeight = screenSize.height;

int screenWidth = screenSize.width;

setSize(screenWidth / 2, screenHeight / 2);

setLocation(screenWidth / 4, screenHeight / 4);

Image img = kit.getImage("icon.gif");

setIconImage(img); setTitle("CenteredFrame");

}

}

 

Работа с меню

n javax . swing . JMenuBar
Панель меню в верхней части окна

n javax . swing . JMenu
Меню как таковое

n javax . swing . JMenuItem
Единичный элемент меню

n javax . swing .JCheckBoxMenuItem
Элемент меню «флажок»

n javax . swing .JRadioButtonMenuItem
Элемент меню «радио-кнопка»

n javax.swing.JPopup
Всплывающее меню

 







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

n Управляют размещением компонентов в контейнере, учитывая параметры этих компонентов (например, предпочтительный размер)

n Реализуют интерфейс java.awt.LayoutManager

n Устанавливаются с помощью метода setLayout () контейнера

n Примеры простых компоновок:

l Простая поточная компоновка FlowLayout

l Граничная компоновка BorderLayout

l Компоновка в сетку GridLayout

l Компоновка «Колода карт» CardLayout

l Сетка с настраиваемыми размерами GridBagLayout

 

Вопрос 76 Обработка событий, общие принципы. Участники и правила именования (с примерами). Классы-адаптеры. 22-24, 31-34 Лекция Основы создания графических приложений.

 

Обработка событий

n Событие

l Классы событий в пакетах

n java.awt.event

n javax.swing.event

n Источник

l public void addTypeListener (TypeListener el) throws java.util.TooManyListenersException

l public void removeTypeListener(TypeListener el)

n Слушатель

l Должен реализовывать методы для приема и обработки уведомлений

l Существует набор интерфейсов TypeListener, описывающих методы обработки событий

l Класс слушателя должен реализовывать интерфейс, соответствующий событию

 

Дата: 2019-07-30, просмотров: 275.