На чём можно написать графический интерфейс desktop приложения на Java
Вопрос задан
Изменён 3 года 2 месяца назад
Просмотрен 3k раза
Кроме стандартной swing, в Java ранее была библиотека JavaFX, которую убрали в последних версиях. Поэтому хотел бы спросить как сейчас создают интерфейс десктопного приложения на Java используют swing, JavaFX или что-то еще может быть новое есть? Какой способ наиболее популярный и лучший?
1
Сейчас идут в основном одним из двух путей:
- Используют JavaFx. Это отличный фреймворк и его убрали из JavaSE не потому что он чем то плох, а потому что изменилась сама концепция JavaSE где стараются избавиться от всего что нельзя причислить к core для Java.
- Пишут приложения под веб и с использованием веб фреймворков (например Spring MVC) и компилируют все это в JavaScript (гуглите проект Electron). Это ваш случай если вы например имеете хороший опыт при работе с веб приложениями, JS и верстке. Фактически десктоп в этом случае это клиент, сервер и браузер (хромиум) под одной оберткой. Этот метод часто критикуют в том числе за производительность, но тем не менее он уже очень популярен за счет простоты и возможности переиспользовать свои навыки работы с вебом.
Де факто для Java на desktop стандартом является swing.
наиболее популярный и лучший
Я Вас разочарую. Java для Desktop решений вообще не популярен и очень давно не развивается.
На Java сейчас в основном пишут либо мобильные приложения под Android (и то здесь его уже очень сильно теснит Kotlin), либо крупные энтерпрайз системы для таких же крупных корпораций, которые работают на серверах и им GUI как таковой даже не нужен.
Для пользователя делают отдельное приложение (как правило с web интерфейсом), но основная часть функционала всё равно скрыта под капотом серверной части.3
1) AWT — уже объявлен умершим
2) Swing уходит в прошлое. К сожалению, Swing так и не выдержал проверку временем. Правда, есть огромное количество софта написанного на Swing, так что умрет он не скоро.
3) На сцену вступает (именно так, только-только вступает) JavaFX
4) SWT — IBM’овская либа (опенсорсная). Хороша. Весь Eclipse написан на ней, да и еще много разного софта (например Vuze/Azureus написан на нем) — основное преимущество, что виджеты реализованы на C++ — посему работает быстро (очень быстро).
По сухому остатку, рекомендовал бы писать строго на JavaFX, ну если требуется быстрый интерфейс, то на SWT. Если присоединяетесь к существующему Swing проекту, то придется учить Swing.
Все тут нахваливают FX, в принципе там всё супер, в купе с «сцен билдером». Но когда дело доходит до многопоточки… без бутылки не разберешься.
1
Зарегистрируйтесь или войдите
Регистрация через Google
Регистрация через Facebook
Регистрация через почту
Отправить без регистрации
Почта
Необходима, но никому не показывается
Отправить без регистрации
Почта
Необходима, но никому не показывается
Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки
swing — Тяжелые и легкие компоненты в Java
Если очень коротко, то:
- Тяжелые компоненты — это компоненты, которые имеют платформенно-зависимую реализацию.
- Легкие компоненты — это компоненты, полностью написанные на
Java
и не зависящие отpeer-интерфейсов
.
Пояснение
Приложения Java
должны работать в любой, или хотя бы во многих графических средах. В связи с этим, требуется библиотека классов, независимая от конкретной графической системы, поэтому в JDK
задачу решили следующим образом: были разработаны интерфейсы (также называются peer-интерфейсами
), содержащие методы работы с графическими объектами. Классы библиотеки AWT (Abstract Window Toolkit)
реализуют эти интерфейсы для создания приложений. Приложения Java
используют данные методы для размещения и перемещения графических объектов, изменения их размеров, взаимодействия объектов.
Для работы с экраном в конкретной графической среде эти интерфейсы реализуются отдельно для каждой. В каждой графической среде это делается по-своему: средствами этой оболочки (с помощью графических библиотек данной операционной системы).
При выводе объекта, созданного в приложении Java
и основанного на peer-интерфейсе
, на экране создается парный ему (peer-to-peer
) объект графической подсистемы операционной системы, который и отображается на экране. Эти объекты тесно взаимодействуют во время работы приложения. Поэтому графические объекты AWT
в каждой графической среде имеют вид, характерный для этой среды и выглядят как «родные» окна.
Начиная с версии JDK 1.1
библиотека AWT
была переработана. В нее добавлена возможность создания компонентов, полностью написанных на Java
и не зависящих от peer-интерфейсов
. Такие компоненты стали называть "легкими" (lightweight)
в отличие от компонентов, реализованных через
, названных "тяжелыми" (heavy)
.
"Легкие" компоненты
везде выглядят одинаково, сохраняют заданный при создании вид (look and feel
). Более того, приложение можно разработать таким образом, чтобы после его запуска можно было выбрать какой-то определенный вид: Motif, Metal, Windows 95 или какой-нибудь другой, и сменить этот вид в любой момент работы. Эта интересная особенность "легких" компонентов
получила название PL&F (Pluggable Look and Feel)
или plaf
.
Была создана обширная библиотека "легких" компонентов Java
, названная Swing
. В ней были переписаны все компоненты библиотеки AWT
, так что библиотека Swing
может использоваться самостоятельно, несмотря на то, что все классы из нее расширяют классы библиотеки AWT
.
В данный момент Swing
является основной библиотекой пользовательского интерфейса в Java
, AWT
— не дорабатывается. Использование библиотеки Swing
— почти всегда предпочтительнее чем AWT
, за исключением тех случаев, когда нужна обратная совместимость с Java 1
.
Обзор Java 2D API
Перейти к Содержание
Содержание | предыдущий | Далее |
Глава 1
Обзор Java 2D API
Java 2D API улучшает графику, текстовые и графические возможности набора средств Abstract Windowing Toolkit (AWT), что позволяет разрабатывать более богатые пользовательские интерфейсы и новые типы Java-приложений.
Наряду с более богатой графикой, шрифтом и изображением API, Java 2D API поддерживает улучшенное определение цвета и композиция, обнаружение попаданий по произвольным геометрическим фигурам и тексту, и единая модель рендеринга для принтеров и устройств отображения.
Java 2D API также позволяет создавать расширенные графические библиотеки, такие как библиотеки CAD-CAM и графика или визуальные библиотеки спецэффектов, а также создание фильтры чтения/записи изображений и графических файлов.
При использовании вместе с Java Media Framework и другие API-интерфейсы Java Media, можно использовать API-интерфейсы Java 2D. создавать и отображать анимацию и другие мультимедиа презентации. API Java Animation и Java Media Framework полагаться на Java 2D API для поддержки рендеринга.
1.1 Улучшенная графика, текст и изображения
Ранние версии AWT предоставляли простой пакет рендеринга, подходящий для рендеринга обычных HTML-страниц, но не достаточно полнофункциональный для сложной графики, текста или изображений. Как упрощенный пакет рендеринга, ранний AWT воплощал конкретные случаи более общих концепций рендеринга. Java 2D API предоставляет более гибкий, полнофункциональный пакет рендеринга за счет расширения AWT для поддержки более общих графических операций и операций рендеринга.
Например, с помощью класса Graphics
можно рисовать прямоугольники, овалы и
многоугольники. Graphics2D
расширяет
концепция геометрического рендеринга, предоставляя механизм для
воссоздание практически любой геометрической формы. Аналогично с Java
2D API позволяет рисовать стилизованные линии любой ширины и заполнять геометрические
формы практически любой текстуры.
Геометрические формы получают посредством
реализации интерфейса Shape
,
например Rectangle2D
и Ellipse2D
. Кривые и дуги также специфичны.
реализации Shape
.
Стили заливки и пера предоставляются через
реализации
и Stroke
интерфейсов, например BasicStroke
, GradientPaint
, TexturePaint
и Color
.
AffineTransform
определяет
линейные преобразования 2D координат, включая масштаб,
переводить, вращать и сдвигать.
Области клипа определяются одним и тем же
реализации интерфейса Shape
которые используются для определения общих областей отсечения, например Rectangle2D
и GeneralPath
.
Цветовая композиция обеспечивается реализациями
интерфейса Composite
, например АльфаКомпозит
.
Шрифт
определяется
наборы из глифов
, которые в свою очередь
определяется индивидуально Формы
.
1.2 Модель рендеринга
Базовая модель рендеринга графики не изменилась
с добавлением API Java 2D. Чтобы визуализировать графику,
вы настраиваете графический контекст и вызываете метод рендеринга на
объект Графика
.
Класс Java 2D API Graphics2D
расширяет Graphics
для поддержки дополнительных графических атрибутов и
предоставить новые методы рендеринга. Настройка контекста Graphics2D
описана в разделе «Визуализация с помощью Graphics2D».
Java 2D API автоматически компенсирует различия в устройствах рендеринга и обеспечивает единообразный рендеринг модель на разных типах устройств. На уровне приложения, процесс рендеринга одинаков, независимо от того, является ли целевой рендеринг устройством является дисплей или принтер.
Java 2D API обеспечивает поддержка многоэкранных сред. См. Раздел 1.2.1, «Координация Системы» и «Визуализация в многоэкранном Окружающая среда» для получения дополнительной информации.
1.2.1 Системы координат
Java 2D API поддерживает две координаты системы:
- Пространство пользователя не зависит от устройства, логическая система координат. Приложения используют эту систему координат исключительно; вся геометрия передается в процедуры рендеринга Java 2D указаны в пользовательском пространстве.
- Устройство spac e зависит от устройства
система координат, которая меняется в зависимости от целевого рендеринга
устройство.
В многоэкранной среде с виртуальным рабочим столом, где окно может охватывать более одного устройства физического экрана, устройство используемая система координат — это система координат виртуальный рабочий стол, охватывающий все экраны. Для большего информация о том, как Java 2D API поддерживает многоэкранные среды, см. «Визуализация в многоэкранном режиме». Среда».
Система Java 2D автоматически выполняет необходимые преобразования между пространством пользователя и пространством устройства целевое устройство рендеринга. Хотя система координат для монитор сильно отличается от системы координат для принтера, эти различия невидимы для приложений.
1.2.1.1 Пространство пользователя
Как показано на рисунке 1-1, исходное пространство пользователя расположен в верхнем левом углу пространства, при этом значения 90 106 x 90 107 увеличиваются вправо и на y значения увеличиваются вниз.
Рис. 1-1 Координаты пространства пользователя Система
Пространство пользователя представляет собой единую абстракцию всех возможные системы координат устройства. Место для устройства конкретное устройство может иметь то же происхождение и направление, что и пользователь пространство, а может быть и по-другому. Несмотря на это, координаты пользовательского пространства автоматически преобразуются в соответствующее пространство устройства при отображении графического объекта. Часто базовая платформа драйверы устройств используются для выполнения этого преобразования.
1.2.1.2 Пространство устройства
Java 2D API определяет три уровня информация о конфигурации, которая поддерживается для поддержки преобразование из пространства пользователя в пространство устройства. Эта информация инкапсулируется тремя классами:
-
GraphicsEnvironment
-
Графическое устройство
-
Конфигурация графики
Между ними GraphicsEnvironment
, GraphicsDevice
и GraphicsConfiguration
представляют все
информация, необходимая для определения местоположения устройства рендеринга или шрифта на
платформе Java и для преобразования координат из пользовательского пространства в
пространство устройства. Приложение может получить доступ к этой информации, но
не нужно выполнять никаких преобразований между пользовательским пространством и
пространство устройства.
Графическая среда
описывает набор устройств рендеринга, видимых для Java
приложения на определенной платформе. Устройства рендеринга включают
экраны, принтеры и буферы изображений. GraphicsEnvironment
также содержит список всех
доступные шрифты на платформе.
A Графическое устройство
описывает видимое приложением устройство рендеринга, такое как экран
или принтер. Каждая возможная конфигурация устройства
представлен GraphicsConfiguration
.
Например, устройство отображения SVGA может работать в нескольких режимах:
640x480x16 цветов, 640x480x256 цветов и 800x600x256 цветов.
Экран SVGA представлен GraphicsDevice
объект и каждый из режимов
представлен GraphicsConfiguration
объект.
A Графическая среда
может содержать один или несколько GraphicsDevices
;
в свою очередь, каждый GraphicsDevice
может иметь
один или несколько GraphicsConfigurations
.
1.2.2 Преобразования
Java 2D API имеет единую координату
модель трансформации. Все преобразования координат, включая
преобразования из пространства пользователя в пространство устройства представлены AffineTransform
объектов. AffineTransform
определяет правила управления
координаты с помощью матриц.
Вы можете добавить AffineTransform
в контекст графики для поворота,
масштабировать, переводить или срезать геометрическую фигуру, текст или изображение, когда
это визуализируется. Добавленное преобразование применяется к любой графике
объект, отображаемый в этом контексте. Преобразование выполняется, когда
координаты пользовательского пространства преобразуются в пространство устройства
координаты.
1.2.3 Шрифты
Под строкой обычно понимают символов, составляющих строку. Когда строка нарисована, ее Внешний вид определяется выбранным шрифтом. Однако формы, которые шрифт использует для отображения строки, не всегда соответствуют отдельным символам. Например, в профессиональном публикация, определенные комбинации двух или более символов часто заменяется одной формой, называемой лигатурой .
Формы, используемые шрифтом для представления
символы в строке называются глифов . Шрифт может представлять такой символ, как
нижний регистр острый с использованием нескольких
глифы или представляют определенные комбинации символов, такие как fi в финале с одним глифом. в
Java 2D API, глиф — это просто Shape
которым можно манипулировать и отображать так же, как и любым другим Форма
.
Можно подумать шрифт как набор глифов. У одного шрифта может быть много
версии, такие как тяжелые, средние, наклонные, готические и обычные.
Эти разные версии называются лица . Все начертания в шрифте имеют одинаковый
типографский дизайн и могут быть признаны членами одного и того же семейство . Другими словами, коллекция
глифы определенного стиля образуют начертание шрифта, набор
Начертания шрифтов образуют семейство шрифтов и коллекцию семейств шрифтов.
формирует набор шрифтов, доступных в конкретной GraphicsEnvironment
.
В Java 2D API шрифты задаются именем который описывает конкретное начертание шрифта, например, Helvetica Смелый.
Используя Java 2D API, вы можете создавать и визуализировать
строки, содержащие несколько шрифтов разных семейств, начертаний,
размеры и даже языки. Внешний вид текста сохранен.
логически отделены от макета текста. объектов Font
используются для описания внешнего вида,
а информация о макете хранится в объектах TextLayout
и TextAttributeSet
. Сохранение шрифта и
раздельная информация о макете упрощает использование одних и тех же шрифтов
в различных конфигурациях планировки.
1.2.4 Изображения
Изображения представляют собой организованные наборы пикселей. пространственно. Пиксель определяет появление изображения в одном месте дисплея. А двумерный массив пикселей называется растром .
Внешний вид пикселя можно определить непосредственно или как индекс в таблице цветов для изображения.
В изображениях, содержащих много цветов (более 256), пиксели обычно напрямую представляют цвет, альфа-канал и другие характеристики отображения для каждого положения экрана. Такие изображения как правило, намного больше, чем изображения с индексированными цветами, но они выглядят более реалистично.
В изображении с индексированными цветами цвета изображения ограничены цветами, указанными в таблице цветов, часто в результате меньше цветов, которые можно использовать в изображении. Однако, индекс обычно требует меньше места для хранения, чем значение цвета, поэтому изображения, хранящиеся в виде набора индексированных цветов, обычно меньше. Этот формат пикселей популярен для изображений, содержащих только 16 или 256 пикселей. цвета.
Изображения в Java 2D API имеют два основных компоненты:
- Необработанные данные изображения (пиксели)
- Информация, необходимая для интерпретации пикселей
Правила интерпретации пикселя
инкапсулирован ColorModel
объект — например, следует ли интерпретировать значения
как прямые или индексированные цвета. Чтобы пиксель отображался, он должен
сочетаться с цветовой моделью.
Полоса — это один из компонентов цветового пространства для изображение. Например, красный, зеленый и синий компоненты являются полосы в RGB-изображении. Пиксель в изображении с прямой цветовой моделью может быть задуман как набор значений полосы для одного экрана расположение.
java.awt.image
пакет содержит несколько ColorModel
реализации, в том числе для упакованных и компонентных пикселей
представления.
Объект ColorSpace
инкапсулирует правила, управляющие набором числовых
измерения соответствует определенному цвету. Реализации ColorSpace
в java.awt.color
представляют самый популярный цвет.
пространства, включая RGB и шкалу серого. Обратите внимание, что цветовое пространство
не набор цветов — он определяет правила того, как
интерпретировать отдельные значения цвета.
Отделение цветового пространства от цветовой модели обеспечивает большую гибкость в представлении цветов и преобразуются из одного цветового представления в другое.
1.2.5 Заливки и обводки
С помощью Java 2D API можно визуализировать Фигуры
, используя различные стили пера и узоры заливки.
Поскольку текст в конечном счете представлен набором глифов, текст
струны также можно поглаживать и заполнять.
Стили пера определяются объектами, реализующими Штрих
интерфейса. Поглаживания позволяют вам
указать различную ширину и пунктирные шаблоны для линий и
кривые.
Образцы заливки определяются объектами, которые
реализовать интерфейс Paint
. Цвет класса
, который был доступен в
более ранние версии AWT — это простой тип объекта Paint
, используемый для определения заливки сплошным цветом.
Java 2D API предоставляет две дополнительные реализации Paint
, TexturePaint
и GradientPaint 9.0028 .
TexturePaint
определяет узор заливки с помощью простого
фрагмент изображения, который повторяется равномерно. GradientPaint
определяет узор заливки как градиент
между двумя цветами.
В Java 2D рендеринг контура фигуры и заполнение фигуры узором — это две отдельные операции:
- Использование одного из
методов рисования
визуализирует контур или контур фигуры, используя стиль пера определяется атрибутомStroke
и шаблон заполнения, указанныйКраска
атрибут. - С помощью метода
fill
заполняет внутренняя часть формы с рисунком, заданнымКраска
Атрибут.
При отображении текстовой строки текущий Атрибут Paint
применяется к глифам
которые образуют строку. Обратите внимание, однако, что drawString
фактически заполняет глифы, которые
предоставлено. Чтобы обвести контуры глифов в текстовой строке,
вам нужно получить контуры и визуализировать их в виде фигур, используя метод рисования
.
1.2.6 Композиты
При рендеринге объекта, перекрывающего
существующий объект, вам нужно определить, как сочетать цвета
новый объект с цветами, которые уже занимают область, где
ты будешь рисовать. Java 2D API инкапсулирует правила того, как
для комбинирования цветов в Composite
объект.
Примитивные системы рендеринга обеспечивают только основные Логические операторы для комбинирования цветов. Например, логическое значение правило компоновки может разрешить исходный и конечный цвет значения для объединения по И, ИЛИ или XOR. Есть несколько проблем с этот подход
- Это не «удобно для человека» — его трудно подумайте, каким будет результирующий цвет, если красный и синий объединяются по И, а не добавляются.
- Логическая композиция не поддерживает точную композицию цветов в разных цветовых пространствах.
- Прямая булевская композиция не учитывает цветовые модели цветов. Например, в индексированном цвете модель, результат логической операции над двумя значениями пикселей в изображение состоит из двух индексов, а не двух цветов.
Java 2D API позволяет избежать этих ошибок,
реализация правил альфа-смешивания 1 , использующих цветовую модель
информация, учитываемая при компоновке цветов. Объект AlphaComposite
включает цветовую модель
как исходный, так и конечный цвета.
1.3 Пакеты Java 2D API
Классы Java 2D API организованы в следующие пакеты:
-
java.awt
-
java.awt.geom
-
java.awt.шрифт
-
java.awt.color
-
java.awt.image
-
java.awt.image.renderable
-
java.awt.print
Пакет java.awt
содержит эти классы Java 2D API и
интерфейсы, которые носят общий характер или улучшают устаревшие
классы. (Очевидно, что не все классы в java.awt
являются 2D-классами Java.)
Package java.awt.geom
содержит классы и интерфейсы
связанные с определением геометрических примитивов.
Многие геометрические примитивы имеют
соответствующие .Float
и .Двойные реализации
. Это было сделано для того, чтобы дать возможность
плавающие реализации с одинарной и двойной точностью. Реализации с двойной точностью обеспечивают лучший рендеринг
точность за счет производительности на некоторых платформах.
Пакет java.awt.font
содержит классы и интерфейсы
используется для размещения текста и определения шрифтов.
Пакет java.awt.color
содержит классы и интерфейсы
для определения цветовых пространств и цветовых профилей.
Пакеты java.awt.image
и >java.awt.image.renderable
содержат классы и интерфейсы для определения и рендеринга
изображений.
Пакет java.awt.print
содержит классы и интерфейсы
которые позволяют печатать весь текст, графику и изображения на основе Java 2D.
изображений.
1 Для получения подробной информации о альфа-смешивание, см. раздел 17.6 книги «Компьютерная графика: принципы». и практика. 2-е изд. Дж. Д. Фоли, А. ван Дам, С.К. Файнер, Дж.Ф. Хьюз. Эддисон-Уэсли, 19 лет90.
Содержание | предыдущий | Далее |
Программирование компьютерной графики в OpenGL с Java
Увеличить
Учителя, запросить копию экзамена:
Запросить в твердом переплете Запросить электронную книгуВ. Скотт Гордон, доктор философии, и Джон Л. Клевенджер, доктор философии
Твердый переплет
Октябрь 2021
9781683927365
Подробнее
- Информация и издательство
- Опубликовано
8 октября 2021 г. - ISBN 9781683927365
- Язык Английский
- Страниц 516 стр.
- Размер 7 x 9 дюймов
- Запрос копии экзамена
89,95 $
Добавить в корзину
Электронная книга
Электронные книги теперь распространяются через RedShelf или VitalSource
Вы выберете поставщика в корзине в процессе оформления заказа. Эти поставщики предлагают более простой способ доступа к электронной книге и добавляют несколько замечательных новых функций, включая преобразование текста в голос. Электронная книга принадлежит вам на всю жизнь, она просто размещается на веб-сайте поставщика и работает так же, как Kindle и Nook. Нажмите здесь, чтобы просмотреть более подробную информацию об этом процессе.
Сентябрь 2021
9781683927341
Подробнее
- Издатель
- 010 Mercury Learning and Information
- Опубликовано
2 сентября 2021 г. - ISBN 9781683927341
- Язык Английский
- Страниц 516 стр.
- Размер 7 x 9 дюймов
- Запрос копии электронного экзамена В корзину Эти издания по цене, равной цене одновременных изданий наших игр в твердом переплете, не доступны напрямую через Stylus.
- Опубликовано