Известные переводы Thinking In Java (2001 — 2003)
Как вы, новерное, знаете, перед тем как написать свою книгу, я переводил чудесную книгу Брюса Эккеля — Thinking In Java, без сомнения, одну из самых лучших и наиболее сбалансированных книг о компьютерных технологиях последних лет, а может быть, и всего времени, что существуют компьютеры.
Не стоит только путать два перевода, появившихся примерно в одно и то же время — мой перевод был сделан для издательства “Питер”, второй перевод был сделан группой энтузиастов в Интернете, которые к сожалению имели слабое представление о русском языке и еще более слабое об английском. К сожалению, я не высылаю перевод “Философии Java” по договору с издательством, а второй перевод, что вы можете видеть в Интернете, крайне неудовлетворителен. Сейчас появился перевод 4-го издания, основанный в некоторых местах на моей работе, однако во многом сделанный другим человеком — мнения о нем также не лучшие. Старые печатные переводы таким образом являются раритетом, которые передается из рук в руки.
Книга получила немало заслуженных наград и внимательное ее прочтение программистом служит своеобразным знаком того, что он обладает всем необходимым для успешного программирования на Java. Тем более приятно, что мой перевод этой прекрасной книги получил немало хвалебных отзывов и я смог принести вам эту книгу на русском языке такой же классной, какой она была и на английском. (Впрочем, вынужден признать, что в третьем издании многовато опечаток, особенно в некоторых текстах программ. Но это не моя вина — все они были внесены на этапе верстки, и повлиять на них я уже не смог.) Вы без труда сможете увидеть следы влияния этой великолепной книги и в моей новой книге, посвященной библиотеке Swing/Java Foundation Classes, настолько она меня впечатлила.
Отзывы о книге “Философия Java” (мои переводы Thinking In Java (2 и 3) )
Пользователь: Антон Стародубцев
Электронный адрес: [email protected]Это одна из лучших кний по java, которые я держал в руках... Нет слов одни эмоции….
Пользователь: Алексей Сахно
Электронный адрес: [email protected]Книга - лучшая книга среди всех по языкам программирования. Что уж говорить, если только сейчас я смог ясно понять сущность классов. Блестяще, просто блестяще!
Пользователь: Cross
Электронный адрес: [email protected]Замечательная книга. Спасибо автору и переводчику!!! :))
Пользователь: Яков Сироткин
Электронный адрес: [email protected]Большинство профессиональных Java-программистов прочитало эту книгу на английском языке, либо в pdf, либо купив за границей. Очень приятный сюрприз, что теперь эта книга доступна на русском, теперь ее не надо читать с экрана монитора и распечатывать, более того это уникальная возможность резко повысить квалификацию программиста, не знающего английского языка.
Пользователь: Igor
Электронный адрес: [email protected]книга написанна доступным языком со многими примерами. Я не пожалел что её приобрёл, так как в Германии такие книги (перевод замечательный!) редко встретишь, если вообще! Только посоветую
Пользователь: Stancho Stanchev
Электронный адрес: s.
[email protected]Класика в жанре. А русское наименование книги очень успешно - как и перевод.
Пользователь: SGag
Электронный адрес: [email protected]Исключительно професииональный перевод. Спасибо! О ценности оригинала уже и не говорю ничего! :-)
Пользователь: Ник
Электронный адрес: [email protected]Замечательная книга. Очень основательная и доходчивая. Подойдет как владеющим Java, так и новичкам.
Книги и учебные ресурсы по Java
Начинающим:
Head First Java (2nd Edition). Kathy Sierra, Bert Bates.
Русский перевод: Изучаем Java. Кэти Сиерра, Берт Бейтс.
Как это обычно бывает в книгах Head First, вас весело и в картинках обучат основам программирования на Java. У опытных программистов книга может вызвать ухмылку, однако для действительно начального уровня она вполне хороша.
Java: A Beginner’s Guide. Herbert Schildt.
Русский перевод: Java.
Руководство для начинающих. Герберт Шилдт.Core Java Volume I: Fundamentals (9th Edition), Core Java Volume II: Advanced Features (9th Edition).
Русский перевод: Java. Библиотека профессионала. Том 1. Основы; Java. Библиотека профессионала. Том 2. Расширенные средства программирования. Кей С. Хорстманн, Гари Корнелл.
Книги Хорстманна написаны достаточно сухим языком и вываливают на читателя горы документации по API и километры листингов с полным кодом примеров. Читать их последовательно может быть довольно тяжко, зато книги станут отличным настольным справочником и сборником рецептов.
Java™ Platform, Standard Edition 7 API Specification, 8, 9, 10, 11.
Онлайн-документация по стандартным библиотекам JAVA SE.
Онлайн-курсы, учебники
- Уроки Java для начинающих на itproger.com
- Самоучитель по Java с нуля — vertex-academy.com
- Java Tutorial (англ.) на Javatpoint
- Курсы на Stepik.
org:- Java. Базовый курс Computer Science Center (CS центр)
- Летняя Java школа
- Adaptive Java (англ.) JetBrains
- Hyperskill (англ.) — сайт с учебными проектами для обучения программированию на Java, Kotlin, Python
- JavaRush
Средний уровень:
Thinking in Java (4th Edition). Bruce Eckel.
Русский перевод: Философия Java. Брюс Эккель.
Классический фолиант джавистов. Для комфортного чтения требуются базовые познания в языке, т.к. книга не ставит своей задачей научить писать на Java с нуля, а научить писать идиоматично.
Java 8: The Complete Reference. Herbert Schildt.
Русский перевод: Java 8. Полное руководство. Герберт Шилдт.
Effective Java (2nd Edition). Joshua Bloch.
Русский перевод: Java. Эффективное программирование. Джошуа Блох.
Джошуа Блох в некотором смысле продолжает идею книги Thinking in Java: еще сильнее углубляясь в особенности языка и стандартных библиотек, учит писать красивый код.

The Well-Grounded Java Developer: Vital techniques of Java 7 and polyglot programming. Benjamin J Evans, Martijn Verburg.
Русский перевод: Java. Новое поколение разработки. Бенджамин Эванс, Мартин Вербург.
Java Puzzlers: Traps, Pitfalls, and Corner Cases. Joshua Bloch, Neal Gafter.
Java Puzzlers дает возможность тем, кто уже «выучил язык» проверить себя. В книге собраны 95 задачек с подвохом: очевидные на первый взгляд фрагменты кода, таящие каверзный баг. Какие-то из рассматриваемых примеров могут показаться надуманными и нежизненными, однако они в полной мере раскрывают тонкие нюансы программирования на Java.
Java Concurrency in Practice. Brian Goetz, Tim Peierls, Joshua Bloch, Joseph Bowbeer, David Holmes, Doug Lea.
Подробнейшее пособие по написанию многопоточного кода на Java. Каждая тема рассматривается с разных сторон на нескольких примерах, так что к концу главы будет полное понимание осуждаемого предмета.
Немаловажно, что один из соавторов (Doug Lea) является автором стандартной библиотеки concurrent-примитивов (
java.util.concurrent).Java Performance. Charlie Hunt, Binu John.
Must read по оптимизации java Программ, тюнингу JVM и сборщика мусора, бенчмаркингу и профилированию.
Core Java for the Impatient. Cay Horstmann.
Книга для нетерпеливых, как следует из названия. Позволяет погрузиться в мир языка Java, рассказывается всё, что на самом деле может пригодиться Java-разработчику. Отдельное внимание уделено новшествам восьмой версии языка. В конце каждой главы есть задания для более плотного усвоения материала. (Хорстманн не очень любит язык
C++, иногда шутит по этому поводу, вроде того:String[] badWords = {"sex", "drugs", "C++"}; , от этого читать становится не так скучно).Java SE 8 for the Really Impatient. Cay Horstmann.
Русский перевод: Java SE 8.
Вводный курс Кей С. ХорстманнаЯвляется продолжением книги Core Java for the Impatient, однако здесь всё внимание уделяется новшествам восьмой версии языка, покрывает очень многие аспекты, будь то лямбда-выражения, работа со
Stream APIили многопоточность. После каждой главы также присутствуют задания для усвоения материала.Head First Design Patterns.Eric Freeman, Elisabeth Robson, Bert Bates, Kathy Sierra.
Русский перевод: Паттерны проектирования. Эрик Фримен, Элизабет Фримен
Отличная книга от издательства O’Reilly, в веселой форме обучит вас основным шаблонам проектирования на языке Java.
Java 8 Lambdas
. Richard Warburton.Русский перевод: Лямбда-выражения в Java 8. Ричард Уорбэртон
Обычно в учебниках по Java мало внимания уделяют или не уделяют вовсе теме использования лямбд и стримов. Учебник Уорбэртона восполняет этот недостаток.
Экспертный уровень:
The Java Language Specification.
James Gosling, Bill Joy, Guy L. Steele Jr., Gilad Bracha, Alex Buckley.The Java Virtual Machine Specification. Tim Lindholm and Frank Yellin.
Oracle JRockit: The Definitive Guide. Marcus Hirt, Marcus Lagergren.
Java™ Servlet Specification 3.1
Исчерпывающая официальная документация о работе и жизненном цикле сервлетов.
Beginning Java EE 7. Antonio Gonsalves.
Русский перевод: Изучаем Java EE 7. Энтони Гонсалвес
Java EE 7. Основы
Арун ГуптаHead First Servlets and JSP, 2nd Edition. Bryan Basham, Kathy Sierra, Bert Bates
Java Servlet and JSP Cookbook. Bruce W. Perry
Русский перевод: Java сервлеты и JSP. Сборник рецептов. Брюс У. Перри
Java EE 8 SDK
Содержит в папке
docsанглоязычные руководства JavaEE Tutorial и FirstCup, а так же всё необходимое для изучения, с примерами готовых проектов на GlassFish.
Онлайн версии так же доступны по адресу Java EE Tutorial
Spring Projects
Официальная документация о каждом проекте Spring. Описано подробно, но довольно сложно и много, поэтому для первого обучения рекомендую начать с Spring Guides.
Spring Guides
Очень простые и наглядные пошаговые уроки (на английском) разных возможностей проектов Spring, с возможностью сразу скачать результат и проверить на своем компьютере. Наиболее актуальные туториалы по Spring, которые есть в интернете, так как постоянно обновляются сообществом. Для более детального изучения — смотрите официальную документацию.
Spring в действии. Крейг Уоллс
Несмотря на то, что в книге описана уже немолодая 3-я версия Spring, книга стоит ознакомления, так как очень просто и подробно знакомит читателя с фреймворком.
Spring 5 для профессионалов. Юлиана Козмина, Роб Харроп, Крис Шефер, Кларенс Хо
Многолетний бестселлер, считающийся наиболее исчерпывающим и авторитетным руководством по Spring.

Pro Spring Integration. Dr. Mark Lui, Mario Gray, Andy Chan and Josh Long (англ.)
Pro Spring Integration — это авторитетная книга от экспертов, которая проведет вас через обширный мир интеграции корпоративных приложений (EAI) и применения инфраструктуры Spring Integration для решения проблем интеграции.
- Pro Spring 5, 5th Edition (2017) Iuliana Cosmina, Rob Harrop, Chris Schaefer, Clarence Ho (англ.)
С помощью этой книги вы сможете изучить основы Spring, фреймворка для Java-платформы, а также EJB и Hibernate. Вы узнаете, как использовать Spring для создания различных частей Java-приложения: транзакций, веб и много другого. Пример приложения, описанного в книге, позволит применить на практике технологии и методы Spring и увидеть, как они работают вместе. Книга подойдет опытным разработчикам на Java.
- Learn Microservices with Spring Boot: A Practical Approach to RESTful Services using RabbitMQ, Eureka, Ribbon, Zuul and Cucumber Moises Macero (англ.
)
Создайте архитектуру микросервисов с помощью Spring Boot, превратив приложение из небольшого монолита в управляемую событиями архитектуру, состоящую из нескольких служб. Эта книга следует поэтапному подходу к обучению микросервисной структуре, разработке через тестирование, Eureka, Ribbon, Zuul и сквозным тестам с Cucumber.
Beginning Hibernate. Joseph B. Ottinger, Dave Minter, Jeff Linwood
Несмотря на то, что в названии книги стандарт JPA не упоминается, бóльшая часть книги посвящена именно его реализации в Hibernate.
Java Persistence with Hibernate. C. Bauer, G. King, G. Gregory
Исчерпывающее описание Hibernate и Java Persistence.
High-Performance Java Persistence book. Vlad Mihalcea.
Данная книга подробно рассказывает о работе с Hibernate ORM, а так же оптимизации кода для лучшей производительности. Данная книга была одобрена на официальном аккаунте Java, а так же автор книги является одним из разработчиков Hibernate.
Также, автор книги активно отвечает на вопросы пользователей в https://stackoverflow.com
SWING: Эффективные пользовательские интерфейсы. Иван Портянкин.
Swing. A Beginner’s Guide. Sсhildt H.
Русский перевод: Swing. Руководство для начинающих. Шилдт Г.
Swing Hacks. Tips and Tools for Killer GUIs. Joshua Marinacci, Chris Adamson.
JavaFX 2.0 Разработка RIA-приложений. Тимур Машнин.
В ней есть вся нужная информация относительно компонентов и оформления их с помощью fxcss, работы с анимацией, воспроизведения видео и аудио, и конечно относительно работы с FXML.
Learn JavaFX 8. Kishori Sharan.
Учебник на английском, в нем подробно описываются все основные элементы JavaFX, особенности их поведения и взаимодействия, описываются наблюдаемые свойства и связывания (properties and bindings), и другие полезные возможности, как вывод на печать и подробное описание обработки событий.

Руководство по JavaFX на metanit.com
Java 8 Pocket Guide. Robert Liguori.
Русский перевод: Java 8. Карманный справочник. Роберт Лигуори.
Отличный справочник, с помощью которого можно моментально найти ответы на вопросы по стандартной библиотеке Java, лямбда-выражениям и т. д.
- Российская Java User Group. В архиве очень много докладов по Java, Spring и так далее. Доклады в основном на русском, рассчитаны на опытных разработчиков.
- Awesome Java — поддерживаемый список лучших библиотек, фреймворков и приложений в мире Java.
- Useful java links — альтернативный список лучших библиотек, фреймворков и приложений в мире Java. Есть русская версия.
- Useful java links (video) — поддерживаемый список русскоязычных видео с докладов и конференций по категориям.
- baeldung.com — На данном сайте представлено огромное множество статей, уроков по разработке приложения на Spring.
Уроки на сайте идут вместе с кодом, который вы найдете в Github в конце каждой статьи. Так же, в уроках представлены разные решения одной и той же проблемы, что не сомнено делает данным сайт полезным как для новичков, так и для опытных программистов. - vladmihalcea — Данный сайт является официальным сайтом одного из разработчиков Hibernate — Vlad Mihalcea. На данном сайте вы найдете множество бесплатных уроков по Hibernate. А так же SQL и Spring
- Thorben Janssen — эксперт по JPA и Hibernate. Ведет текстовый и видеоблог.
- Мысли о Java — На данном ресурсе, как и на ресурсе выше вы найдете множество статей и уроков связанных с Hibernate и JPA. Автор сайта имеет многолетний опыт работы с Hibernate. Более десяти лет назад он использовал один из первых релизов Hibernate для реализации уровня персистентности корпоративных приложений.
Java Swing
Отличная работа, O’Reilly для еще одного победителя. Java Swing — чемпион среди программистов конца 1990-х.
Java Swing is big — это большая книга длиной около 1220 страниц, посвященная Java Foundation Classes. JFC — это пользовательский интерфейс следующего поколения для Java. Он состоит из набора облегченных графических компонентов пользовательского интерфейса, заменяющих абстрактный инструментарий Windows. Профессиональные разработчики приложений должны знать, что JFC написан на 100% чистой Java, тогда как AWT полагается на тяжеловесные родные одноранговые компоненты. Другими словами, JFC рисует всю свою графику, используя примитивы Java. Авторы JFC в рамках этой инициативы разработали новую структуру, позволяющую динамически переключаться между внешним видом и ощущениями. Javasoft разумно называет этот подключаемый внешний вид, и есть три plaf, которые входят в стандартную комплектацию Swing, а именно Motif, Windows и Metal, который является стандартным нейтральным внешним видом платформы Java.
Java Swing действительно пытается охватить JFC и его философию в своих рамках.
Следует поблагодарить штатных редакторов O’Reilly за тщательное расположение свойств, принадлежащих каждому компоненту Java Swing. Авторы обнаружили, что расположение свойств таким образом помогает им понять, как работает Swing. Преимущество этого заключается в том, что он сэкономил бумагу (и, следовательно, быстро сокращающиеся тропические леса в мире), что могло бы легко удвоить размер книги. Их обычный стиль и выбор текста очень приятны для глаз. Описание интерфейса приложения (API) более чем адекватное, и оно не просто скопировано из онлайн-мануалов.
Это первое издание книги появилось в октябре 1998 года. К сожалению, компания Javasoft изменила имя пакета Swing API с «com.sun.java.swing.*» на «java.swing.*», потому что они делали Swing стандартным расширением Java. для новейшей платформы Java 2. Итак, весь исходный код устарел, ну и что? Вы по-прежнему можете загрузить исходный код, и вместе с Swing поставляется утилита для переименования пакетов. Таким образом, книга по-прежнему очень актуальна с небольшими изменениями в начале каждого исходного файла.
Существует подробное введение в JFC, архитектуру контроллера представления модели, большое количество исходного кода, примеры, объяснения первого, идеи, подсказки и подсказки, описание событий и обработка событий колебания, а также эти очень важные свойства. После знакомства с Swing, начиная с третьей главы, обсуждаются все критически важные классы компонентов, такие как JComponent, JFrame, JDialog, JInternalFrame и JWindow. Существует подробное описание контейнеров корневой панели, менеджеров компоновки и настроек границ. Вы узнаете об основах JLabel, JButton, JComboBox, JList, JSplitPane, JScrollPane и JOptionPane. Книга очень хорошо описывает JTree и JTable. Существует пример использования JTable с возможностью подключения к базе данных Java для тех разработчиков, которые хотят выполнять запросы к базам данных. Компоненты таблицы и дерева являются наиболее обсуждаемыми компонентами в группах новостей «comp.lang.java», эта книга поможет вам понять, как полностью запрограммировать эти жизненно важные объекты.
Самым большим сюрпризом стало количество книг, посвященных текстовому API Swing. Этот раздел книги занимает около 265 страниц и состоит из шести глав. Начиная с упрощенного использования компонентов JTextArea и JTextField, книга расширяется до масштабного описания архитектуры текстовых документов Swing. Объект модели документа является основой для внутренней работы более сложных текстовых компонентов, таких как JEditorPane и JTextPane. Объект модели документа и его потомки, которые довольно сложны, но необходимы, если вы хотите разработать сложное приложение, такое как чувствительный к языку редактор или текстовый процессор. Книга не покажет вам, как выполнить эту задачу, на самом деле для этого потребуется еще одна специальная книга О’Рейли, но ее необходимо прочитать, чтобы узнать о наборах атрибутов, событиях документа, элементах, контекстах стилей, раскладках клавиш, наборах редакторов, тексте. действия, фабричные представления, основные моменты и классы каретки. Великолепно! Это стоит только входной платы.
Целая глава (девять) посвящена внутренним фреймам, что впервые позволяет Java-приложениям эмулировать популярный многодокументный интерфейс. Еще одна глава посвящена Swing Dialog и подробному описанию JOptionPane. На странице 288 вы найдете самые восхитительные таблицы API, которые вы когда-либо видели, о создании диалогового окна сообщения. Menubar, меню и панели инструментов также описаны очень хорошо. Есть слишком много тем, чтобы описывать их здесь, но то, что действительно выдвигает Java Swing далеко за пределы всех остальных, включая «Основные классы Java Foundation» Кима Топли, — это главы, посвященные пакету специальных возможностей Java (для людей с ограниченными физическими возможностями), подключаемому внешнему виду и -чувствуйте дизайн и архитектуру, а также служебные классы Swing. В этих заключительных главах есть полностью рабочий пример создания и написания пользовательского компонента Swing. Существует практическая помощь по использованию Swing в приложении, использующем несколько потоков.
Возможно, единственные главы, которые отсутствуют, на мой взгляд, это что-то о перетаскивании и расширенных графических примитивах, которые появляются в платформе Java 2, которая также является частью JFC. Исходный код можно загрузить из примеров O’Reilly, и его не нужно много компилировать и пробовать самостоятельно. Книга определенно поможет создать профессионально выглядящее приложение Swing/JFC и даст вам исчерпывающую информацию по теме. Молодец, О’Рейли, еще один победитель. Java Swing — чемпион среди программистов конца 1990-х.
Создание пользовательских интерфейсов с помощью Swing
Создание пользовательских интерфейсов с помощью Swing
Марк Дж. Балбес, доктор философии, инженер-программист OCI
октябрь 1999 г.
Введение
Одним из мощных преимуществ программирования на Java является возможность легко создавать надежные современные графические пользовательские интерфейсы (GUI).
Первой попыткой Sun создать инструментарий с графическим интерфейсом был Abstract Windowing Toolkit.
Несмотря на мощную концепцию, AWT имел существенные недостатки с точки зрения функциональности и стабильности.
Признавая эти недостатки, Sun заменила AWT пакетом Swing Java Foundation Classes. Swing предлагает 100% чистый инструментарий Java для создания практически любого графического интерфейса.
В этой статье мы узнаем о различных компонентах, поставляемых пакетом Swing, и обсудим, когда использовать Swing и когда использовать AWT.
AWT против Swing
В основе AWT лежала очень простая философия: Java-приложение должно выглядеть так, как будто оно является родным приложением на любой платформе, на которой оно выполняется. Таким образом, в системе UNIX приложение будет выглядеть как приложение UNIX (Motif). Точно так же на Macintosh это же приложение будет выглядеть и работать так же, как и любое другое приложение Macintosh.
Это было достигнуто за счет использования одноранговых компонентов .
Каждый компонент AWT на самом деле был внешним интерфейсом для родного однорангового компонента.
Таким образом, кнопка AWT в системе Windows будет отображать настоящую кнопку Windows.
Проблема с этим подходом заключалась в том, что возможности каждого компонента AWT были ограничены пересечением возможностей всех поддерживаемых операционных систем. И не было никакой гарантии, что любая реализация Java на новой платформе сможет поддерживать все возможности AWT.
Swing решает эту проблему, используя 100% чистую реализацию Java.
Все компоненты созданы на языке Java и не зависят от служб базовых операционных систем. Например, когда вы отображаете Swing JButton (эквивалент кнопки в AWT), кнопка рисуется виртуальной машиной Java и генерирует события Java 1.1.
Прелесть этой конструкции в том, что возможности компонентов не ограничены базовыми операционными системами. Это также означает, что могут быть созданы новые компоненты, не имеющие равноценного аналога.
Представление о том, что компоненты должны иметь внешний вид базовой операционной системы, также было заменено подключаемым внешним видом.
Компоненты Swing могут изменять способ отображения и даже поведение на основе внешнего вида, установленного программистом.
Swing поставляется с внешним видом Java по умолчанию, а также с внешним видом Motif. Кроме того, внешний вид Windows и Macintosh доступен для соответствующих операционных систем.
Обратите внимание, что ограничение этих последних видов и функций связано только с лицензионными ограничениями, а не с какими-либо ограничениями, присущими архитектуре Swing. Если Microsoft или Apple когда-нибудь признают, что их внешний вид можно использовать на других платформах, Sun снимет текущие ограничения.
Готовые компоненты поворотного механизма
Компоненты, поставляемые в Swing, можно разделить на две категории: те, которые копируют функциональные возможности AWT, и более продвинутые компоненты, предоставляющие новые функции.
Основные компоненты включают в себя:
- Контейнеры (JFrame, JPanel, JApplet и JDialog)
- Кнопки и этикетки
- Комбинированные блоки
- Списки
- Полосы прокрутки
- Меню
Одним из новых компонентов, который было бы очень сложно — если не невозможно — создать с помощью AWT, является JSplitPane, который помещает два компонента в один контейнер с относительным размером компонентов, контролируемым разделителем, который можно перетаскивать в желаемое положение.
Двумя наиболее мощными расширенными компонентами являются таблица, похожая на электронную таблицу, и сворачиваемое многоуровневое дерево для отображения иерархически организованных данных.
Swing также предоставляет мощные возможности работы с документами и отображения, средство отмены и API специальных возможностей.
Подробное описание всех компонентов и возможностей Swing см. в ссылках, перечисленных в конце этой статьи.
Создание пользовательских компонентов
Благодаря облегченной архитектуре Swing относительно просто создавать пользовательские компоненты, которые демонстрируют функциональные возможности, недоступные в компонентах Swing.
Самый простой способ создать пользовательский компонент — объединить существующие компоненты Swing в контейнер, чтобы создать компонент нового типа. Например, простой компонент часов можно легко создать, поместив JLabel, отображающий текущее время, рядом с JComboBox, позволяющим пользователю выбрать часовой пояс.
Конечно, это тоже можно построить с помощью AWT.
Однако вы можете использовать Swing для создания более сложных часов.
Пример
Допустим, вы хотите создать часы, способные переключаться между цифровым и аналоговым дисплеем в зависимости от настроек пользователя.
Если бы нам нужно было построить эти часы с помощью AWT, мы, вероятно, создали бы два разных компонента: один для цифровых часов и один для аналоговых часов. Однако с помощью Swing мы можем создать один компонент с двумя разными пользовательскими интерфейсами, но с общими функциями.
Это возможно, поскольку компоненты Swing разработаны с использованием шаблона проектирования Model-View-Controller (MVC). В MVC дизайн каждого компонента разделен на модель, описывающую основные функции компонента, представление, отображающее информацию в модели, и контроллер, используемый для изменения модели.
В Swing представление и контроллер объединяются в делегат пользовательского интерфейса.
Хотя цифровой дисплей мог быть создан с использованием однорангового компонента в AWT, аналоговый дисплей не имеет аналогов. Он должен быть создан как пользовательский компонент.
В Swing компонент часов разделен на модель для описания функциональности часов (например, предоставляет метод для получения текущего времени и отправляет события обновления каждую секунду) и делегат пользовательского интерфейса (отображает текущее время).
На самом деле можно построить два разных делегата пользовательского интерфейса: цифровой делегат и аналоговый делегат. Затем переключение внешнего вида может позволить пользователю переключаться между двумя типами дисплеев.
Хотя для этого компонента AWT мы также могли бы использовать дизайн MVC, нет встроенной поддержки внешнего вида, позволяющей легко переключаться между стилями часов.
Модели внешнего вида
Теперь, когда мы понимаем, как Swing использует MVC, мы можем понять, как работает подключаемый внешний вид.
Каждый компонент Swing имеет (по крайней мере) одну связанную с ним модель, но для каждого внешнего вида существует свой делегат пользовательского интерфейса. Таким образом, базовая функциональность компонента, представленная моделью, остается прежней, но то, как выглядит и ведет себя часть пользовательского интерфейса, может быть совершенно другой.
Также можно создать собственный внешний вид, либо создав подклассы делегатов пользовательского интерфейса существующего внешнего вида, либо, если вы амбициозны, написав совершенно новый набор делегатов пользовательского интерфейса.
Для приведенного выше примера с часами мы могли бы создать «викторианское» оформление, которое отображало бы наши часы с аналоговым интерфейсом, и «современное» оформление, которое отображало бы наши часы с цифровым интерфейсом.
Когда использовать Swing
Выбор использования Swing для проекта не всегда является простым решением. Существует множество различных критериев, которые необходимо учитывать.
Вероятно, самая большая проблема заключается в том, что Swing в настоящее время не установлен ни в одном из основных браузеров. Это означает, что апплет Swing, распространяемый через Интернет, требует большого времени загрузки только для того, чтобы загрузить Swing (размером около 2 МБ) в клиентскую систему.
В контролируемой среде, такой как интранет, эту проблему можно решить, используя подключаемый модуль Sun Java 2 (в настоящее время доступен только для Windows и Solaris) или предварительно установив файл swing.jar в путь к классам каждого клиента. Для приложения, которое установлено на каждом клиентском компьютере, обычно не составляет труда включить Swing в дистрибутив.
Как только основные браузеры будут поддерживать Swing, потребность в использовании AWT для интернет-апплетов резко сократится или исчезнет.
Еще одной проблемой является производительность Swing.
В своем текущем воплощении Swing заметно медленнее, чем AWT на более медленных компьютерах.
Эта проблема подтверждает представление о том, что Swing еще не готов для развертывания интернет-апплета. В контролируемой среде, такой как корпоративная интрасеть, производительность может не иметь большого значения.
Принимая решение, основанное на вышеуказанных проблемах, следует отметить, что Swing с каждым днем становится все быстрее и все более распространенным.
Для разработки приложений или апплетов интрасети Swing предлагает множество преимуществ, которые перевешивают его нынешние недостатки.
Если вы сейчас начинаете проект интернет-апплета Java, вы должны подумать о том, каким будет современное состояние во время развертывания. Если вы планируете развертывание в ближайшие пару месяцев, можете поспорить, что ничего особо не изменится. Однако, если вы не будете развертывать систему в течение периода от 6 месяцев до года, вы можете сделать ставку на то, что Swing будет доступен по крайней мере в одном из основных браузеров и что его производительность будет значительно улучшена.
Неиспользование Swing, хотя и менее рискованное решение, будет означать создание апплета с меньшим количеством функций и меньшими возможностями для улучшения.
Технические проблемы
Swing имеет много технических проблем, о которых должны знать новые разработчики.
Во-первых, при точной настройке приложения для повышения производительности и использования памяти важно знать, что текущие реализации Swing, как правило, плохо освобождают ссылки на неиспользуемые объекты. Инструменты анализа памяти, такие как Heap Analysis Tool, JProbe и JInsight, могут быть полезны для отслеживания таких аномалий.
Также важно отметить, что совместное использование компонентов Swing и AWT опасно. Из-за ограничений реализации тяжеловесные компоненты AWT всегда рисуются поверх легковесных компонентов Swing. Смешивание компонентов обоих типов может привести к неожиданным результатам при отображении вашего графического интерфейса.
Наиболее важным ограничением, о котором следует помнить, является то, как Swing разработан для работы в многопоточной среде.
Архитекторы Swing решили, что создание быстрого, надежного, полнофункционального инструментария с графическим интерфейсом будет скомпрометировано, если они также попытаются гарантировать, что каждый компонент является потокобезопасным. Поэтому важно выполнять почти всю работу с компонентами Swing, используя поток диспетчеризации событий. Поскольку только этот поток манипулирует компонентами, обеспечивается синхронизация и безопасность потоков.
Для большинства базовых компонентов многопоточность не является проблемой. Однако для более сложных компонентов, таких как JTable и JTree, чрезвычайно важно, чтобы модификации компонента и его базовой модели выполнялись в потоке диспетчеризации событий.
SwingWorker
Хотя изменение компонентов Swing в потоке диспетчеризации событий важно, не менее важно не связывать этот поток с действиями, которые могут выполняться в других потоках.
Создание Runnable для одного из вышеперечисленных методов, который собирает данные, выполняет вычисления, а затем обновляет компонент Swing, часто требует больше работы, чем желательно для потока диспетчеризации.
Разработчики Swing создали удобное решение.
SwingWorker — это класс, упрощающий многопоточное программирование в Swing. К сожалению, этот класс не является частью выпуска Swing и должен загружаться отдельно от Swing Connection.
Чтобы использовать SwingWorker, вы создаете его подкласс и переопределяете методы и конструкт() . Метод struct() выполняется в новом потоке. Сюда помещается весь код, не влияющий на графический интерфейс, например сбор данных с других объектов и выполнение вычислений.
По завершении конструкт() возвращает объект. Затем SwingWorker выполняет метод finish() в потоке отправки событий.
Внутри метода finish() выполняются любые обновления компонента Swing (его модели или делегата пользовательского интерфейса). При необходимости вызов get() вернет объект, созданный методом struct() .
Руководство для начинающих. Герберт Шилдт.
org:

Вводный курс Кей С. Хорстманна
James Gosling, Bill Joy, Guy L. Steele Jr., Gilad Bracha, Alex Buckley.
Онлайн версии так же доступны по адресу Java EE Tutorial

Уроки на сайте идут вместе с кодом, который вы найдете в Github в конце каждой статьи. Так же, в уроках представлены разные решения одной и той же проблемы, что не сомнено делает данным сайт полезным как для новичков, так и для опытных программистов.