Приложение – это не только программный код. При написании любой программы необходимо позаботиться о так называемом графическом интерфейсе. Говоря простыми словами – то, как будет выглядеть контент.
Программное обеспечение создается для того, чтобы им могли пользоваться не только опытные программеры, но и обычные ПК пользователи. Поэтому графическая составляющая при коддинге крайне важна. Для ее реализации в языках программирования есть библиотеки, а также дополнительные утилиты. В данной статье будет рассказано о том, как создавать списки в Java, а также работать со Swing.
Определение
Swing – простой инструмент Джавы, оснащенный графическим интерфейсом. Обладает огромным количество виджетов для того, чтобы создавать разнообразное программное обеспечение. Является частью JFC. Основывается на AWT API.
Ключевым преимуществом является то, что данный инструментарий полностью написан на Java. Это позволяет полноценно использовать возможности «утилиты» при коддинге на соответствующем языке программирования. Обладает легкими компонентами и никак не зависит от задействованной платформы.
Позволяет создавать:
- «перечисления»;
- флажки;
- кнопки;
- иные элементы интерфейса, которые может использовать простой пользователь.
Swing – библиотека, предназначенная для формирования графического интерфейса на Джаве. Схож с AWT по предназначению, но обладает рядом отличительных преимуществ.
AWT или Swing: ключевые отличия
Для того, чтобы создать new interface, можно использовать обе «технологии». Но, чтобы итоговый продукт был максимально комфортным и легким для понимания, предстоит остановиться на одном из предложенных вариантов.
Реализация поставленной задачи зависит от того, насколько хорошо разработчик понимает, что такое AWT и Swing. Таблица ниже поможет разобраться в разнице между соответствующими инструментами.
AWTSwingЧувствительна к платформе, на которой запускаетсяПлатформо-независимый вариантОтсутствует соответствие MVCИмеет место соответствие MVCИспользует относительно небольшой пакет компонентовПозволяет использовать мощный функционал для создания new list и интерфейсовНет поддержки подключаемого внешнего вида и ощущенияВнешний вид может быть подключенТяжелаяЛегкая
Из всего вышесказанного следует, что знать основы Swing при работе с Java – это значит облегчить себе процесс коддинга. Такой вариант идеально подходит для сложных и тяжеловесных проектов.
О контейнерных классах
Класс, имеющий те или иные компоненты в своем составе – это контейнерный класс. Для того, чтобы создавать утилиты с графическими интерфейсами, требуется минимум один класс контейнеров.
Они бывают верхнего и нижнего уровней. К первой категории относят:
- JApplet – главное окно апплета;
- JFrame – окошко того или иного приложения;
- JColorChooser – выбор цветовой гаммы;
- JFileChooser – определение спектра директорий и файлов;
- FileDialog – аналогично предыдущему варианту, но является компонентом AWT.
Нижний уровень называется простым. Сюда относят:
- панели для группировки элементов, инструментов;
- прокрутку;
- контейнеры, отвечающие за создание рабочего стола на основе MDI;
- «оболочки» отображения сложных RTF или HTML;
- управление закладками;
- контейнер разделения двух элементов, позволяющий юзерам производить корректировки размера оных.
В контейнерном классе и интерфейсах можно использовать разнообразные элементы в виде контейнеров.
Основные интерфейсные составляющие
Если в качестве «оболочки» используется элемент управления, будет иметь место наследование от определенного класса. Он носит название java.awt.Container.
Сюда можно отнести:
- кнопки;
- кнопки-флажки;
- выпадающий список (JComboBox);
- метки и надписи;
- обычные списки;
- поля скрытого ввода информации;
- отображение чисел в установленных диапазонах;
- переключатели;
- компоненты, дающие возможность выбирать значения из установленного диапазона или последовательности;
- таблицы;
- текстовые поля;
- деревья.
Сегодня, изучив основы Свинг, будет предложено создать выпадающий список в Java приложении. Это не так трудно, как может показаться изначально. Особенно если хорошенько изучить рассматриваемый инструментарий.
События
При работе с графическим интерфейсом происходит создание new событий. Вот и примеры:
- ActionEvent – определяется тем или иным компонентом;
- KeyEvent – ввод с клавиатуры;
- ItemEvent – выбор или отмена оного;
- MouseEvent – события, связанные с мышкой;
- WindowEvent – события окошка ПО (активация, свертывание, корректировка).
Для того, чтобы обрабатывать события элементов, требуется зарегистрировать объект-обработчик в качестве слушателя. Тут на помощь приходит метод addYYYListener. Непосредственная обработка осуществляется через интерфейс, который соответствует выбранному объекту.
Стандартные компоновщики
При коддинге списка или интерфейса через Swing нужно помнить, что тут есть автоматическое позиционирование, а также задание габаритов дочерних элементов. Делается все это в случае с контейнерами через компоновщики.
Вот стандартные элементы подобного вида:
- BorderLayout – размещение элементов в один из 5 регионов, как при добавлении в контейнер;
- FlowLayout – элементы по порядку, соответствуя ориентации контейнера (изначально — слева на право);
- GridLayout – табличное размещение;
- BoxLayout – отображение по вертикали/горизонтали;
- SpringLayout – низкоуровневый менеджер для утилит построителей форм;
Есть еще и GroupLayout. Тоже создавался для построителей форм. На практике используется не слишком часто, хоть и относится к стандартным.
Кнопки
Работая в Джаве с interface, стоит знать не только о том, как создавать new списки, но и применять кнопки. Ниже можно увидеть пример элементарного соответствующего элемента управления:
Основная работа с new button – это преимущественно размещение в контейнере, а также задействованием обработчика событий.
Если говорить об интерфейсе, то кнопки JButton легко корректируются. Менеджер изменяться не будет. Вот пример того, как будет выглядеть код в Свинг для упомянутого элемента управления различных форм:
// Класс относительно того, как будут выглядеть new JButton
import java.awt.*;
import java.awt.event.ItemEvent;
import java.awt.event.ActionEvent;
import java.awt.event.ItemListener;
import java.awt.event.ActionListener;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class ButtonStylesTest extends JFrame
{
private static final long serialVersionUID = 1L;
public ButtonStylesTest()
{
super("Интерфейсы кнопок");
setDefaultCloseOperation( EXIT_ON_CLOSE );
// Установка последовательного положения
Container container = getContentPane();
container.setLayout(new FlowLayout( FlowLayout.LEFT, 10, 10));
// Самая обычная кнопка
JButton button = new JButton("Обычная кнопка");
// Коннектинг слушателя событий
button.addActionListener(new ListenerAction());
button.addChangeListener(new ListenerChange());
// Подключение слушателя на месте
button.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
System.out.println("Это событие мы не увидим");
}});
container.add(button);
// Кнопка, содержащая значки (картинки/символы)
button = new JButton();
button.setIcon (new ImageIcon("images/copy.png"));
button.setRolloverIcon(new ImageIcon("images/cut.png" ));
button.setPressedIcon (new ImageIcon("images/open.png"));
button.setDisabledIcon(new ImageIcon("images/save.png"));
// Избавление от рамок и заливки
button.setBorderPainted(false);
button.setFocusPainted(false);
button.setContentAreaFilled(false);
container.add(button);
// Описание интерфейса в HTML (new button)
button = new JButton("<html><h2><font
color=\"yellow\">Синяя кнопка");
// button.setOpaque(true);
button.setBackground(Color.blue);
container.add(button);
// Корректировка выравнивания и изображений
button = new JButton("Изменение выравнивания",
new ImageIcon("images/exit.png"));
button.setMargin (new Insets(10, 10, 10, 10));
button.setVerticalAlignment (SwingConstants.TOP );
button.setHorizontalAlignment (SwingConstants.RIGHT );
button.setHorizontalTextPosition(SwingConstants.LEFT );
button.setVerticalTextPosition (SwingConstants.BOTTOM);
button.setIconTextGap(10);
// Создание большого элемента управления
button.setPreferredSize(new Dimension(300, 100));
container.add(button);
// Отключенная кнопка
button = new JButton("Выключено");
button.setEnabled(false);
container.add(button);
// Вывод окна на дисплей устройства
setSize(400, 350);
setVisible(true);
}
class ListenerAction implements ActionListener {
public void actionPerformed(ActionEvent e) {
System.out.println("Нажатие кнопки! От - "+
e.getActionCommand() + "\n");
}
Это – пример использования JButton в Java. Если скомпилировать кодификацию, получится лицезреть несколько кнопок – обычную, синюю, с подписями «Изменение выравнивания» и «Выключено».
Настройки, свойства, события
Чтобы использовать список и создавать его, в первую очередь разбираются с кнопками. Вот пример настройки интерфейса оных:
А вот события, которые возникают при работе с рассматриваемым элементом управления:
А вот свойства, которые помогают изменять представление иконок:
Списки – что знать
Списки — элементы, применяемые на практике достаточно часто. В интерфейсе без них трудно представить сложную программу. Особенно это касается ПО, где можно что-либо выбирать или добавлять new позиции.
Они в Джаве бывают двух типов:
- JLists – обычные;
- JComboBox – выпадающий.
У списка (обычного new) два поставщика информации. Первый отвечает за реализацию интерфейса ListModel. В ней находятся элементы списка. Второй это работа с interface ListSelectionModel. Он отвечает за составляющими, которые выделены. Изначально включена поддержка самых важных способов выделения через DefaultListSelectionModel.
Вот пример использования обычного new списка и моделей Default. Это – самый простой вариант развития событий.
Модели списков
Имея дело со Swing, разрабу предстоит выучить много new информации. Лучше всего создавать списки и другие графические элементы через модели данных. Они дают разграничивать обработку информации от ее представления на дисплее.
AbstractListModel
Первое, о чем необходимо помнить, желая создать new список. У ListModel всего 4 метода:
- присоединения и удаления слушателей – 2 штуки;
- возврата элемента, находящегося в той или иной позиции списка;
- уточнения количества составляющих модели.
Чтобы работать со списками, Свинг обладает стандартной моделью информации DefaultListModel. Она позволяет хранить и корректировать данные предельно комфортно. Иногда требуется создавать собственные new модели данных. Пример – там, где информация располагается в нестандартной структуре.
DatabaseListModel – необходим для абстрактного класса моделей списков. Содержит информацию в динамическом массиве ArrayList.
Выделение
JList – это new список (или уже созданный список), у которого есть модель выделения. Называется DefaultListSelectionModel. Обладает несколькими режимами выделения составляющих списка. Вот режимы оных:
РежимЗа что отвечаетSINGLE_SELECTIONВыделяет один компонент спискаSINGLE_INTERVAL_SELECTIONНесколько смежных составляющих спискаMULTIPLE_INTERVAL_SELECTIONНесколько позиций списка произвольно
А вот самые распространенные методы модели выделения jlist-компонентов:
- setSelectedIndex (int idx) – один элемент в списке;
- setSelectionInterval (int anchor, int lead) – несколько смежных компонентов;
- addSelectionInterval (int anchor, int lead) – прибавление в имеющемуся выделению еще одну позицию;
- setSelectedIndices (int[] rows) – несколько выделенных произвольно составляющих.
Второй и третий варианты как параметры задействуют первые и последние выделяемые компоненты списка. Если оба одинаковые, выделится один «объект».
А вот наглядный пример реализации. Разобраться в нем, благодаря комментариям и предложенной информации, не так уж трудно.
Методы получения информации о выделенных компонентах
Это – стандартные возможности, предусматриваемые DefaultListSelectionModel. Их достаточно для большинства new приложений и списков. Собственная модель может быть создана при помощи такого шаблона:
Тут предопределены два метода: добавление нового элемента выделения в списке к имеющемуся, а также определение интервала выделения.
Настройка вида
Пример jlist в Java был представлен ранее. После того, как список будет создан, его можно откорректировать. Вот свойства и методы определения интерфейса списков:
СвойстваХарактеристикаbackground, foreground, fontФон и цвет символов, шрифтselectedBackgroundЗаливка выделенных составляющихselectedForegroundЦветовая гамма символов выделенных компонентов
Данные свойства в списке (new или уже созданном ранее) помогут произвести стилистическую настройку.
Слушатель событий
Списки jlist включают в себя стандартные события от клавиатуры и мыши. Относятся к базовому компоненту JComponent. Дополнительные события осуществляются непосредственно в моделях оного.
Здесь по умолчанию нет двойных щелчков мышкой. Средства по их определению тоже отсутствуют. Но при желании можно добавить их посредством слушателя обработки событий клавиш мышки.
Выпадающий список – пример и особенности
Такой вариант позволяет выбирать один элемент из нескольких изначально доступных. За подобные действия в Swing отвечает JComboBox. В обычном состоянии он отображает только один компонент –тот, что был выбран. Альтернативы возникают во всплывающем окошке при раскрытии «перечня».
Особенности такого объекта:
- поддержка выбора одного компонента из представленных;
- редактирование текущего элемента;
- ввод собственных значений;
- возможность поиска посредством клавиатуры.
Использует подобный «перечень» одну модель – которая предоставляет сведения об элементах оного. Свойства модели определяются интерфейсом ComboBoxModel, который наследуется от ListModel.
Вот пример раскрывающегося перечня:
Результат будет таким:
С основами Swing покончено. А для того, чтобы лучше изучить данную область и такие фразы как new jpanel, int I, public static void, args, string, static void main, array и другие понятия программирования не вызывали никаких вопросов, стоит обратить внимание на специализированные курсы.
Они позволяют получить:
- новые выгодные и интересные знакомства;
- опыт работы с Джавой и его инструментами;
- сертификат по завершению обучения.
Проводятся в очной и дистанционной формах. Могут запускаться в любое время, что делает такие курсы предельно удобными. new actionlistener и другие термины программирования не доставит никаких хлопот.
Обучение рассчитано на срок от нескольких месяцев до года. Курсы делятся по уровню навыков и знаний потенциального ученика.
<!DOCTYPE html>
<html dir="ltr" lang="ru-RU">
<head>
<meta charset="UTF-8" />
<meta http-equiv="x-ua-compatible" content="ie=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="profile" href="http://gmpg.org/xfn/11" />
<title>Работа с графическим интерфейсом в Джава: списки и Swing OTUS</title>
<!-- All in One SEO 4.5.2.1 - aioseo.com -->
<meta name="description" content="Приложение – это не только программный код. При написании любой программы необходимо позаботиться о так называемом графическом интерфейсе. Говоря простыми словами – то, как будет выглядеть контент. Программное обеспечение создается для того, чтобы им могли пользоваться не только опытные программеры, но и обычные ПК пользователи. Поэтому графическая составляющая при коддинге крайне важна. Для ее реализации" />
<meta name="robots" content="max-image-preview:large" />
<link rel="canonical" href="https://otus.ru/journal/rabota-s-graficheskim-interfejsom-v-dzhava-spiski-i-swing/" />
<meta name="generator" content="All in One SEO (AIOSEO) 4.5.2.1" />
<script type="application/ld+json" class="aioseo-schema">
{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/otus.ru\/journal\/rabota-s-graficheskim-interfejsom-v-dzhava-spiski-i-swing\/#article","name":"\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c \u0432 \u0414\u0436\u0430\u0432\u0430: \u0441\u043f\u0438\u0441\u043a\u0438 \u0438 Swing OTUS","headline":"\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c \u0432 \u0414\u0436\u0430\u0432\u0430: \u0441\u043f\u0438\u0441\u043a\u0438 \u0438 Swing","author":{"@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author"},"publisher":{"@id":"https:\/\/otus.ru\/journal\/#organization"},"image":{"@type":"ImageObject","url":"https:\/\/otus.ru\/journal\/wp-content\/uploads\/2022\/01\/oj-1080x720-11.png","width":1080,"height":720},"datePublished":"2022-01-11T17:34:29+00:00","dateModified":"2022-01-11T17:34:30+00:00","inLanguage":"ru-RU","mainEntityOfPage":{"@id":"https:\/\/otus.ru\/journal\/rabota-s-graficheskim-interfejsom-v-dzhava-spiski-i-swing\/#webpage"},"isPartOf":{"@id":"https:\/\/otus.ru\/journal\/rabota-s-graficheskim-interfejsom-v-dzhava-spiski-i-swing\/#webpage"},"articleSection":"\u041f\u043e\u043b\u0435\u0437\u043d\u043e\u0435, Java, Swing"},{"@type":"BreadcrumbList","@id":"https:\/\/otus.ru\/journal\/rabota-s-graficheskim-interfejsom-v-dzhava-spiski-i-swing\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/otus.ru\/journal\/#listItem","position":1,"name":"\u0413\u043b\u0430\u0432\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430","item":"https:\/\/otus.ru\/journal\/","nextItem":"https:\/\/otus.ru\/journal\/rabota-s-graficheskim-interfejsom-v-dzhava-spiski-i-swing\/#listItem"},{"@type":"ListItem","@id":"https:\/\/otus.ru\/journal\/rabota-s-graficheskim-interfejsom-v-dzhava-spiski-i-swing\/#listItem","position":2,"name":"\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c \u0432 \u0414\u0436\u0430\u0432\u0430: \u0441\u043f\u0438\u0441\u043a\u0438 \u0438 Swing","previousItem":"https:\/\/otus.ru\/journal\/#listItem"}]},{"@type":"Organization","@id":"https:\/\/otus.ru\/journal\/#organization","name":"\u041e\u0442\u0443\u0441 \u043e\u043d\u043b\u0430\u0439\u043d-\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435","url":"https:\/\/otus.ru\/journal\/","sameAs":["https:\/\/www.youtube.com\/channel\/UCetgtvy93o3i3CvyGXKFU3g"],"contactPoint":{"@type":"ContactPoint","telephone":"+74999389202","contactType":"Customer Support"}},{"@type":"Person","@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author","url":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/","name":"A. Pavlenko","image":{"@type":"ImageObject","@id":"https:\/\/otus.ru\/journal\/rabota-s-graficheskim-interfejsom-v-dzhava-spiski-i-swing\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/d4c499a104d7c2522fa41f89e6819499?s=96&d=mm&r=g","width":96,"height":96,"caption":"A. Pavlenko"}},{"@type":"WebPage","@id":"https:\/\/otus.ru\/journal\/rabota-s-graficheskim-interfejsom-v-dzhava-spiski-i-swing\/#webpage","url":"https:\/\/otus.ru\/journal\/rabota-s-graficheskim-interfejsom-v-dzhava-spiski-i-swing\/","name":"\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c \u0432 \u0414\u0436\u0430\u0432\u0430: \u0441\u043f\u0438\u0441\u043a\u0438 \u0438 Swing OTUS","description":"\u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u2013 \u044d\u0442\u043e \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0439 \u043a\u043e\u0434. \u041f\u0440\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u043b\u044e\u0431\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u0437\u0430\u0431\u043e\u0442\u0438\u0442\u044c\u0441\u044f \u043e \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u043e\u043c \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435. \u0413\u043e\u0432\u043e\u0440\u044f \u043f\u0440\u043e\u0441\u0442\u044b\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438 \u2013 \u0442\u043e, \u043a\u0430\u043a \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043a\u043e\u043d\u0442\u0435\u043d\u0442. \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0435 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u0435 \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0438\u043c \u043c\u043e\u0433\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u043f\u044b\u0442\u043d\u044b\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435\u0440\u044b, \u043d\u043e \u0438 \u043e\u0431\u044b\u0447\u043d\u044b\u0435 \u041f\u041a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0430\u044f \u043f\u0440\u0438 \u043a\u043e\u0434\u0434\u0438\u043d\u0433\u0435 \u043a\u0440\u0430\u0439\u043d\u0435 \u0432\u0430\u0436\u043d\u0430. \u0414\u043b\u044f \u0435\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438","inLanguage":"ru-RU","isPartOf":{"@id":"https:\/\/otus.ru\/journal\/#website"},"breadcrumb":{"@id":"https:\/\/otus.ru\/journal\/rabota-s-graficheskim-interfejsom-v-dzhava-spiski-i-swing\/#breadcrumblist"},"author":{"@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author"},"creator":{"@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author"},"image":{"@type":"ImageObject","url":"https:\/\/otus.ru\/journal\/wp-content\/uploads\/2022\/01\/oj-1080x720-11.png","@id":"https:\/\/otus.ru\/journal\/rabota-s-graficheskim-interfejsom-v-dzhava-spiski-i-swing\/#mainImage","width":1080,"height":720},"primaryImageOfPage":{"@id":"https:\/\/otus.ru\/journal\/rabota-s-graficheskim-interfejsom-v-dzhava-spiski-i-swing\/#mainImage"},"datePublished":"2022-01-11T17:34:29+00:00","dateModified":"2022-01-11T17:34:30+00:00"},{"@type":"WebSite","@id":"https:\/\/otus.ru\/journal\/#website","url":"https:\/\/otus.ru\/journal\/","name":"OTUS JOURNAL","description":"Blog about IT","inLanguage":"ru-RU","publisher":{"@id":"https:\/\/otus.ru\/journal\/#organization"}}]}
</script>
<!-- All in One SEO -->
<link rel='dns-prefetch' href='//otus.ru' />
<link rel='dns-prefetch' href='//fonts.googleapis.com' />
<link rel='stylesheet' id='wp-block-library-css' href='https://otus.ru/journal/wp-includes/css/dist/block-library/style.min.css?ver=6.4.7' type='text/css' media='all' />
<style id='classic-theme-styles-inline-css' type='text/css'>
/*! This file is auto-generated */
.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none}
</style>
<style id='global-styles-inline-css' type='text/css'>
body{--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgba(255,105,0,1) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgba(255, 255, 255, 1), 6px 6px rgba(0, 0, 0, 1);--wp--preset--shadow--crisp: 6px 6px 0px rgba(0, 0, 0, 1);}:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}body .is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}body .is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}body .is-layout-constrained > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}body .is-layout-constrained > .aligncenter{margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull)){max-width: var(--wp--style--global--content-size);margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > .alignwide{max-width: var(--wp--style--global--wide-size);}body .is-layout-flex{display: flex;}body .is-layout-flex{flex-wrap: wrap;align-items: center;}body .is-layout-flex > *{margin: 0;}body .is-layout-grid{display: grid;}body .is-layout-grid > *{margin: 0;}:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}
.wp-block-navigation a:where(:not(.wp-element-button)){color: inherit;}
:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}
:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}
.wp-block-pullquote{font-size: 1.5em;line-height: 1.6;}
</style>
<link rel='stylesheet' id='wbcr-comments-plus-url-span-css' href='https://otus.ru/journal/wp-content/plugins/clearfy/components/comments-plus/assets/css/url-span.css?ver=2.2.0' type='text/css' media='all' />
<link rel='stylesheet' id='wpel-style-css' href='https://otus.ru/journal/wp-content/plugins/wp-external-links/public/css/wpel.css?ver=2.59' type='text/css' media='all' />
<link rel='stylesheet' id='ez-toc-css' href='https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/assets/css/screen.min.css?ver=2.0.61' type='text/css' media='all' />
<style id='ez-toc-inline-css' type='text/css'>
div#ez-toc-container .ez-toc-title {font-size: 120%;}div#ez-toc-container .ez-toc-title {font-weight: 500;}div#ez-toc-container ul li {font-size: 95%;}div#ez-toc-container nav ul ul li {font-size: 90%;}
.ez-toc-container-direction {direction: ltr;}.ez-toc-counter ul{counter-reset: item ;}.ez-toc-counter nav ul li a::before {content: counters(item, ".", decimal) ". ";display: inline-block;counter-increment: item;flex-grow: 0;flex-shrink: 0;margin-right: .2em; float: left; }.ez-toc-widget-direction {direction: ltr;}.ez-toc-widget-container ul{counter-reset: item ;}.ez-toc-widget-container nav ul li a::before {content: counters(item, ".", decimal) ". ";display: inline-block;counter-increment: item;flex-grow: 0;flex-shrink: 0;margin-right: .2em; float: left; }
</style>
<link rel='stylesheet' id='contentberg-fonts-css' href='https://fonts.googleapis.com/css?family=Roboto%3A400%2C500%2C700%7CPT+Serif%3A400%2C400i%2C600%7CIBM+Plex+Serif%3A500' type='text/css' media='all' />
<link rel='stylesheet' id='contentberg-core-css' href='https://otus.ru/journal/wp-content/themes/contentberg/style.css?ver=1.8.3' type='text/css' media='all' />
<link rel='stylesheet' id='contentberg-lightbox-css' href='https://otus.ru/journal/wp-content/themes/contentberg/css/lightbox.css?ver=1.8.3' type='text/css' media='all' />
<link rel='stylesheet' id='font-awesome-css' href='https://otus.ru/journal/wp-content/themes/contentberg/css/fontawesome/css/font-awesome.min.css?ver=1.8.3' type='text/css' media='all' />
<script type="text/javascript" id="breeze-prefetch-js-extra">
/* <![CDATA[ */
var breeze_prefetch = {"local_url":"https:\/\/otus.ru\/journal","ignore_remote_prefetch":"1","ignore_list":["\/wp-admin\/"]};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/breeze/assets/js/js-front-end/breeze-prefetch-links.min.js" id="breeze-prefetch-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/jquery/jquery.min.js" id="jquery-core-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/jquery/jquery-migrate.min.js" id="jquery-migrate-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/lazysizes.js" id="lazysizes-js"></script>
<link rel="https://api.w.org/" href="https://otus.ru/journal/wp-json/" /><link rel="alternate" type="application/json" href="https://otus.ru/journal/wp-json/wp/v2/posts/2665" /><link rel='shortlink' href='https://otus.ru/journal/?p=2665' />
<link rel="alternate" type="application/json+oembed" href="https://otus.ru/journal/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fotus.ru%2Fjournal%2Frabota-s-graficheskim-interfejsom-v-dzhava-spiski-i-swing%2F" />
<link rel="alternate" type="text/xml+oembed" href="https://otus.ru/journal/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fotus.ru%2Fjournal%2Frabota-s-graficheskim-interfejsom-v-dzhava-spiski-i-swing%2F&format=xml" />
<script>var Sphere_Plugin = {"ajaxurl":"https:\/\/otus.ru\/journal\/wp-admin\/admin-ajax.php"};</script><link rel="icon" href="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-32x32.png" sizes="32x32" />
<link rel="icon" href="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-192x192.png" sizes="192x192" />
<link rel="apple-touch-icon" href="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-180x180.png" />
<meta name="msapplication-TileImage" content="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-270x270.png" />
<style type="text/css" id="wp-custom-css">
#menu-item-10406 .wpel-icon {
display: none;
}
#menu-item-10407 .wpel-icon {
display: none;
}
.otus-login-site a .wpel-icon {
display: none;
}
.menu-menju-navykov-container a .wpel-icon {
display: none;
}
.otus-login-site a
{
background: #ffd709;
border-radius: 12px;
color: #0f0f10;
font-size: 14px;
font-weight: 700;
line-height: 20px;
display: block;
text-align: center;
padding: 8px 25px;
}
.main-footer.dark {
background: linear-gradient(90deg, #a64fc5, #4f54e6);
border-color: transparent;
}
.main-footer.bold .copyright {
color: #fff;
}
.main-footer.bold .to-top i {
color: #fff;
}
.main-footer.bold .back-to-top {
color: #fff;
}
.nav__scroll {
overflow-x: auto;
-webkit-overflow-scrolling: touch;
}
.scrollable-menu .menu {
display: flex;
}
.nav__scroll
{
background: linear-gradient(90deg, #a64fc5, #4f54e6);
}
.scrollable-menu .menu .menu-item {
flex: 0 0 auto;
padding: 15px 15px;
}
.scrollable-menu .menu .menu-item a {
color: #fff;
}
.nav__scroll::-webkit-scrollbar{background-color:#fff;height:5px;}
.nav__scroll::-webkit-scrollbar-thumb{background-color:#dcdcdc;}
.nav__scroll::-webkit-scrollbar-track{-webkit-border-radius:0;border-radius:0;background-color:#fff;}/
body {
min-width: 320px;
}
.banner-click img {
margin: 0 auto;
display: block;
}
.banner-click {
cursor: pointer;
}
.banner-footer-area {
margin-bottom: 20px;
}
.banner-left-area {
margin-top: 40px;
} </style>
<!--Start VDZ Yandex Metrika Plugin-->
<!-- Yandex.Metrika counter --><script type="text/javascript" >(function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})(window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");ym(34531570, "init", {clickmap:true, trackLinks:true, accurateTrackBounce:true, webvisor:true, trackHash:true, ecommerce:"dataLayer"});</script>
<noscript><div><img src="https://mc.yandex.ru/watch/34531570" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
<!-- /Yandex.Metrika counter --><!--START ADD EVENTS FROM CF7--><script type='text/javascript'>document.addEventListener( 'wpcf7submit', function( event ) {
//event.detail.contactFormId;
if(ym){
//console.log(event.detail);
ym(34531570, 'reachGoal', 'VDZ_SEND_CONTACT_FORM_7');
ym(34531570, 'params', {
page_url: window.location.href,
status: event.detail.status,
locale: event.detail.contactFormLocale,
form_id: event.detail.contactFormId,
});
}
}, false );
</script><!--END ADD EVENTS FROM CF7-->
<!--End VDZ Yandex Metrika Plugin-->
</head>
<body class="post-template-default single single-post postid-2665 single-format-standard right-sidebar lazy-normal has-lb">
<div class="main-wrap">
<header id="main-head" class="main-head head-nav-below has-search-modal simple simple-boxed">
<div class="inner inner-head" data-sticky-bar="0">
<div class="wrap cf wrap-head">
<div class="left-contain">
<span class="mobile-nav"><i class="fa fa-bars"></i></span>
<div class="title">
<a href="https://otus.ru/journal/" title="OTUS JOURNAL" rel="home" data-wpel-link="internal">
<span class="text-logo"><img src="/journal/wp-content/themes/contentberg/img/logo_site.svg" alt="OTUS JOURNAL"></span>
</a>
</div>
</div>
<div class="navigation-wrap inline">
<nav class="navigation inline simple light" data-sticky-bar="0">
<div class="menu-rubriki-container"><ul id="menu-rubriki" class="menu"><li id="menu-item-109" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-cat-1 menu-item-109"><a href="https://otus.ru/journal/category/pro-it/" data-wpel-link="internal"><span>Про IT</span></a></li>
<li id="menu-item-113" class="menu-item menu-item-type-taxonomy menu-item-object-category current-post-ancestor current-menu-parent current-post-parent menu-cat-4 menu-item-113"><a href="https://otus.ru/journal/category/polza/" data-wpel-link="internal"><span>Полезное</span></a></li>
<li id="menu-item-114" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-cat-3 menu-item-114"><a href="https://otus.ru/journal/category/lifestyle/" data-wpel-link="internal"><span>Лайфстайл</span></a></li>
<li id="menu-item-10406" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10406"><a href="https://otus.ru/catalog/courses" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right"><span>Обучение</span><span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10407" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10407"><a href="https://otus.ru/about" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right"><span>Информация</span><span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
</ul></div> </nav>
</div>
<div class="actions">
<div class="otus-login-site">
<a href="https://otus.ru/login/" target="_blank" data-wpel-link="external" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Войти<span class="wpel-icon wpel-image wpel-icon-6"></span></a>
</div>
<a href="#" title="Search" class="search-link"><i class="fa fa-search"></i></a>
</div>
</div>
</div>
</header> <!-- .main-head -->
<div class="nav nav_disable nav_colored nav_transparent course-categories__nav nav__scroll ">
<div class="container wrap">
<div class="links inline simple light scrollable-menu">
<div class="menu-menju-navykov-container"><ul id="menu-menju-navykov" class="menu"><li id="menu-item-10413" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10413"><a href="https://otus.ru/categories/programming/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Программирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10414" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10414"><a href="https://otus.ru/categories/architecture/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Архитектура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10415" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10415"><a href="https://otus.ru/categories/operations/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Инфраструктура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10416" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10416"><a href="https://otus.ru/categories/information-security-courses/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Безопасность<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10417" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10417"><a href="https://otus.ru/categories/data-science/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Data Science<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10418" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10418"><a href="https://otus.ru/categories/gamedev/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">GameDev<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10419" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10419"><a href="https://otus.ru/categories/marketing-business/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Управление<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10420" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10420"><a href="https://otus.ru/categories/analytics/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Аналитика и анализ<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10421" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10421"><a href="https://otus.ru/categories/testing/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Тестирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
</ul></div> </div>
</div>
</div>
<div class="main wrap">
<div class="ts-row cf">
<div class="col-8 main-content cf">
<article id="post-2665" class="the-post post-2665 post type-post status-publish format-standard has-post-thumbnail category-polza tag-java tag-swing">
<header class="post-header the-post-header cf">
<div class="post-meta the-post-meta">
<span class="post-cat">
<a href="https://otus.ru/journal/category/polza/" class="category" data-wpel-link="internal">Полезное</a>
</span>
<h1 class="post-title">
Работа с графическим интерфейсом в Джава: списки и Swing
</h1>
<a href="https://otus.ru/journal/rabota-s-graficheskim-interfejsom-v-dzhava-spiski-i-swing/" class="date-link" data-wpel-link="internal"><time class="post-date">11 января, 2022</time></a>
</div>
<div class="featured">
<a href="https://otus.ru/journal/wp-content/uploads/2022/01/oj-1080x720-11.png" class="image-link" data-wpel-link="internal"><img width="770" height="515" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20770%20515%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="attachment-contentberg-main size-contentberg-main lazyload wp-post-image" alt="Работа с графическим интерфейсом в Джава: списки и Swing" title="Работа с графическим интерфейсом в Джава: списки и Swing" decoding="async" fetchpriority="high" data-srcset="https://otus.ru/journal/wp-content/uploads/2022/01/oj-1080x720-11-770x515.png 770w, https://otus.ru/journal/wp-content/uploads/2022/01/oj-1080x720-11-300x200.png 300w, https://otus.ru/journal/wp-content/uploads/2022/01/oj-1080x720-11-1024x683.png 1024w, https://otus.ru/journal/wp-content/uploads/2022/01/oj-1080x720-11-150x100.png 150w, https://otus.ru/journal/wp-content/uploads/2022/01/oj-1080x720-11-270x180.png 270w" data-src="https://otus.ru/journal/wp-content/uploads/2022/01/oj-1080x720-11-770x515.png" data-sizes="(max-width: 770px) 100vw, 770px" /> </a>
</div>
</header><!-- .post-header -->
<div class="post-content description cf entry-content content-normal">
<div id="ez-toc-container" class="ez-toc-v2_0_61 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction">
<div class="ez-toc-title-container">
<p class="ez-toc-title " >Содержание</p>
<span class="ez-toc-title-toggle"><a href="#" class="ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle" aria-label="Toggle Table of Content"><span class="ez-toc-js-icon-con"><span class=""><span class="eztoc-hide" style="display:none;">Toggle</span><span class="ez-toc-icon-toggle-span"><svg style="fill: #999;color:#999" xmlns="http://www.w3.org/2000/svg" class="list-377408" width="20px" height="20px" viewBox="0 0 24 24" fill="none"><path d="M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z" fill="currentColor"></path></svg><svg style="fill: #999;color:#999" class="arrow-unsorted-368013" xmlns="http://www.w3.org/2000/svg" width="10px" height="10px" viewBox="0 0 24 24" version="1.2" baseProfile="tiny"><path d="M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z"/></svg></span></span></span></a></span></div>
<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-1" href="#%D0%9E%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5" title="Определение">Определение</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-2" href="#AWT_%D0%B8%D0%BB%D0%B8_Swing_%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%B2%D1%8B%D0%B5_%D0%BE%D1%82%D0%BB%D0%B8%D1%87%D0%B8%D1%8F" title="AWT или Swing: ключевые отличия">AWT или Swing: ключевые отличия</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-3" href="#%D0%9E_%D0%BA%D0%BE%D0%BD%D1%82%D0%B5%D0%B9%D0%BD%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%B0%D1%85" title="О контейнерных классах">О контейнерных классах</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-4" href="#%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D1%8B%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81%D0%BD%D1%8B%D0%B5_%D1%81%D0%BE%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D1%8F%D1%8E%D1%89%D0%B8%D0%B5" title="Основные интерфейсные составляющие">Основные интерфейсные составляющие</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-5" href="#%D0%A1%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D1%8F" title="События">События</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-6" href="#%D0%A1%D1%82%D0%B0%D0%BD%D0%B4%D0%B0%D1%80%D1%82%D0%BD%D1%8B%D0%B5_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%BE%D0%B2%D1%89%D0%B8%D0%BA%D0%B8" title="Стандартные компоновщики">Стандартные компоновщики</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-7" href="#%D0%9A%D0%BD%D0%BE%D0%BF%D0%BA%D0%B8" title="Кнопки">Кнопки</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-8" href="#%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B8_%D1%81%D0%B2%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%B0_%D1%81%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D1%8F" title="Настройки, свойства, события">Настройки, свойства, события</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-9" href="#_%D0%A1%D0%BF%D0%B8%D1%81%D0%BA%D0%B8_%E2%80%93_%D1%87%D1%82%D0%BE_%D0%B7%D0%BD%D0%B0%D1%82%D1%8C" title=" Списки – что знать"> Списки – что знать</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-10" href="#%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D1%81%D0%BF%D0%B8%D1%81%D0%BA%D0%BE%D0%B2" title="Модели списков">Модели списков</a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class="ez-toc-link ez-toc-heading-11" href="#AbstractListModel" title="AbstractListModel">AbstractListModel</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-12" href="#%D0%92%D1%8B%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5" title="Выделение">Выделение</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-13" href="#%D0%9C%D0%B5%D1%82%D0%BE%D0%B4%D1%8B_%D0%BF%D0%BE%D0%BB%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE_%D0%B2%D1%8B%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%BD%D1%8B%D1%85_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82%D0%B0%D1%85" title="Методы получения информации о выделенных компонентах">Методы получения информации о выделенных компонентах</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-14" href="#%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B2%D0%B8%D0%B4%D0%B0" title="Настройка вида">Настройка вида</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-15" href="#%D0%A1%D0%BB%D1%83%D1%88%D0%B0%D1%82%D0%B5%D0%BB%D1%8C_%D1%81%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D0%B9" title="Слушатель событий">Слушатель событий</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-16" href="#%D0%92%D1%8B%D0%BF%D0%B0%D0%B4%D0%B0%D1%8E%D1%89%D0%B8%D0%B9_%D1%81%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%E2%80%93_%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80_%D0%B8_%D0%BE%D1%81%D0%BE%D0%B1%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D0%B8" title="Выпадающий список – пример и особенности">Выпадающий список – пример и особенности</a></li></ul></nav></div>
<p>Приложение – это не только программный код. При написании любой программы необходимо позаботиться о так называемом графическом интерфейсе. Говоря простыми словами – то, как будет выглядеть контент.</p>
<p>Программное обеспечение создается для того, чтобы им могли пользоваться не только опытные программеры, но и обычные ПК пользователи. Поэтому графическая составляющая при коддинге крайне важна. Для ее реализации в языках программирования есть библиотеки, а также дополнительные утилиты. В данной статье будет рассказано о том, как создавать списки в Java, а также работать со Swing.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9E%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5"></span>Определение<span class="ez-toc-section-end"></span></h2>
<p>Swing – простой инструмент Джавы, оснащенный графическим интерфейсом. Обладает огромным количество виджетов для того, чтобы создавать разнообразное программное обеспечение. Является частью JFC. Основывается на AWT API.</p>
<p>Ключевым преимуществом является то, что данный инструментарий полностью написан на Java. Это позволяет полноценно использовать возможности «утилиты» при коддинге на соответствующем языке программирования. Обладает легкими компонентами и никак не зависит от задействованной платформы.</p>
<p>Позволяет создавать:</p>
<ul><li>«перечисления»;</li><li>флажки;</li><li>кнопки;</li><li>иные элементы интерфейса, которые может использовать простой пользователь.</li></ul>
<p>Swing – библиотека, предназначенная для формирования графического интерфейса на Джаве. Схож с AWT по предназначению, но обладает рядом отличительных преимуществ.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="AWT_%D0%B8%D0%BB%D0%B8_Swing_%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%B2%D1%8B%D0%B5_%D0%BE%D1%82%D0%BB%D0%B8%D1%87%D0%B8%D1%8F"></span>AWT или Swing: ключевые отличия<span class="ez-toc-section-end"></span></h3>
<p>Для того, чтобы создать new interface, можно использовать обе «технологии». Но, чтобы итоговый продукт был максимально комфортным и легким для понимания, предстоит остановиться на одном из предложенных вариантов.</p>
<p>Реализация поставленной задачи зависит от того, насколько хорошо разработчик понимает, что такое AWT и Swing. Таблица ниже поможет разобраться в разнице между соответствующими инструментами.</p>
<figure class="wp-block-table"><table><tbody><tr><td>AWT</td><td>Swing</td></tr><tr><td>Чувствительна к платформе, на которой запускается</td><td>Платформо-независимый вариант</td></tr><tr><td>Отсутствует соответствие MVC</td><td>Имеет место соответствие MVC</td></tr><tr><td>Использует относительно небольшой пакет компонентов</td><td>Позволяет использовать мощный функционал для создания new list и интерфейсов</td></tr><tr><td>Нет поддержки подключаемого внешнего вида и ощущения</td><td>Внешний вид может быть подключен</td></tr><tr><td>Тяжелая</td><td>Легкая</td></tr></tbody></table></figure>
<p>Из всего вышесказанного следует, что знать основы Swing при работе с Java – это значит облегчить себе процесс коддинга. Такой вариант идеально подходит для сложных и тяжеловесных проектов.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9E_%D0%BA%D0%BE%D0%BD%D1%82%D0%B5%D0%B9%D0%BD%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%B0%D1%85"></span>О контейнерных классах<span class="ez-toc-section-end"></span></h3>
<p>Класс, имеющий те или иные компоненты в своем составе – это контейнерный класс. Для того, чтобы создавать утилиты с графическими интерфейсами, требуется минимум один класс контейнеров.</p>
<p>Они бывают верхнего и нижнего уровней. К первой категории относят:</p>
<ul><li>JApplet – главное окно апплета;</li><li>JFrame – окошко того или иного приложения;</li><li>JColorChooser – выбор цветовой гаммы;</li><li>JFileChooser – определение спектра директорий и файлов;</li><li>FileDialog – аналогично предыдущему варианту, но является компонентом AWT.</li></ul>
<p>Нижний уровень называется простым. Сюда относят:</p>
<ul><li>панели для группировки элементов, инструментов;</li><li>прокрутку;</li><li>контейнеры, отвечающие за создание рабочего стола на основе MDI;</li><li>«оболочки» отображения сложных RTF или HTML;</li><li>управление закладками;</li><li>контейнер разделения двух элементов, позволяющий юзерам производить корректировки размера оных.</li></ul>
<p>В контейнерном классе и интерфейсах можно использовать разнообразные элементы в виде контейнеров.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D1%8B%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81%D0%BD%D1%8B%D0%B5_%D1%81%D0%BE%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D1%8F%D1%8E%D1%89%D0%B8%D0%B5"></span>Основные интерфейсные составляющие<span class="ez-toc-section-end"></span></h2>
<p>Если в качестве «оболочки» используется элемент управления, будет иметь место наследование от определенного класса. Он носит название java.awt.Container.</p>
<p>Сюда можно отнести:</p>
<ul><li>кнопки;</li><li>кнопки-флажки;</li><li>выпадающий список (JComboBox);</li><li>метки и надписи;</li><li>обычные списки;</li><li>поля скрытого ввода информации;</li><li>отображение чисел в установленных диапазонах;</li><li>переключатели;</li><li>компоненты, дающие возможность выбирать значения из установленного диапазона или последовательности;</li><li>таблицы;</li><li>текстовые поля;</li><li>деревья.</li></ul>
<p>Сегодня, изучив основы Свинг, будет предложено создать выпадающий список в Java приложении. Это не так трудно, как может показаться изначально. Особенно если хорошенько изучить рассматриваемый инструментарий.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A1%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D1%8F"></span>События<span class="ez-toc-section-end"></span></h3>
<p>При работе с графическим интерфейсом происходит создание new событий. Вот и примеры:</p>
<ul><li>ActionEvent – определяется тем или иным компонентом;</li><li>KeyEvent – ввод с клавиатуры;</li><li>ItemEvent – выбор или отмена оного;</li><li>MouseEvent – события, связанные с мышкой;</li><li>WindowEvent – события окошка ПО (активация, свертывание, корректировка).</li></ul>
<p>Для того, чтобы обрабатывать события элементов, требуется зарегистрировать объект-обработчик в качестве слушателя. Тут на помощь приходит метод addYYYListener. Непосредственная обработка осуществляется через интерфейс, который соответствует выбранному объекту.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A1%D1%82%D0%B0%D0%BD%D0%B4%D0%B0%D1%80%D1%82%D0%BD%D1%8B%D0%B5_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%BE%D0%B2%D1%89%D0%B8%D0%BA%D0%B8"></span>Стандартные компоновщики<span class="ez-toc-section-end"></span></h3>
<p>При коддинге списка или интерфейса через Swing нужно помнить, что тут есть автоматическое позиционирование, а также задание габаритов дочерних элементов. Делается все это в случае с контейнерами через компоновщики.</p>
<p>Вот стандартные элементы подобного вида:</p>
<ul><li>BorderLayout – размещение элементов в один из 5 регионов, как при добавлении в контейнер;</li><li>FlowLayout – элементы по порядку, соответствуя ориентации контейнера (изначально — слева на право);</li><li>GridLayout – табличное размещение;</li><li>BoxLayout – отображение по вертикали/горизонтали;</li><li>SpringLayout – низкоуровневый менеджер для утилит построителей форм;</li></ul>
<p>Есть еще и GroupLayout. Тоже создавался для построителей форм. На практике используется не слишком часто, хоть и относится к стандартным.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9A%D0%BD%D0%BE%D0%BF%D0%BA%D0%B8"></span>Кнопки<span class="ez-toc-section-end"></span></h2>
<p>Работая в Джаве с interface, стоит знать не только о том, как создавать new списки, но и применять кнопки. Ниже можно увидеть пример элементарного соответствующего элемента управления:</p>
<figure class="wp-block-image size-large"><img decoding="async" width="305" height="48" src="https://otus.ru/journal/wp-content/uploads/2022/01/1-6.jpg" alt="Работа с графическим интерфейсом в Джава: списки и Swing" class="wp-image-2668" srcset="https://otus.ru/journal/wp-content/uploads/2022/01/1-6.jpg 305w, https://otus.ru/journal/wp-content/uploads/2022/01/1-6-300x47.jpg 300w, https://otus.ru/journal/wp-content/uploads/2022/01/1-6-150x24.jpg 150w" sizes="(max-width: 305px) 100vw, 305px" /></figure>
<p>Основная работа с new button – это преимущественно размещение в контейнере, а также задействованием обработчика событий.</p>
<p>Если говорить об интерфейсе, то кнопки JButton легко корректируются. Менеджер изменяться не будет. Вот пример того, как будет выглядеть код в Свинг для упомянутого элемента управления различных форм:</p>
<pre class="wp-block-code"><code>// Класс относительно того, как будут выглядеть new JButton
import java.awt.*;
import java.awt.event.ItemEvent;
import java.awt.event.ActionEvent;
import java.awt.event.ItemListener;
import java.awt.event.ActionListener;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class ButtonStylesTest extends JFrame
{
private static final long serialVersionUID = 1L;
public ButtonStylesTest()
{
super("Интерфейсы кнопок");
setDefaultCloseOperation( EXIT_ON_CLOSE );
// Установка последовательного положения
Container container = getContentPane();
container.setLayout(new FlowLayout( FlowLayout.LEFT, 10, 10));
// Самая обычная кнопка
JButton button = new JButton("Обычная кнопка");
// Коннектинг слушателя событий
button.addActionListener(new ListenerAction());
button.addChangeListener(new ListenerChange());
// Подключение слушателя на месте
button.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
System.out.println("Это событие мы не увидим");
}});
container.add(button);
// Кнопка, содержащая значки (картинки/символы)
button = new JButton();
button.setIcon (new ImageIcon("images/copy.png"));
button.setRolloverIcon(new ImageIcon("images/cut.png" ));
button.setPressedIcon (new ImageIcon("images/open.png"));
button.setDisabledIcon(new ImageIcon("images/save.png"));
// Избавление от рамок и заливки
button.setBorderPainted(false);
button.setFocusPainted(false);
button.setContentAreaFilled(false);
container.add(button);
// Описание интерфейса в HTML (new button)
button = new JButton("<html><h2><font
color=\"yellow\">Синяя кнопка");
// button.setOpaque(true);
button.setBackground(Color.blue);
container.add(button);
// Корректировка выравнивания и изображений
button = new JButton("Изменение выравнивания",
new ImageIcon("images/exit.png"));
button.setMargin (new Insets(10, 10, 10, 10));
button.setVerticalAlignment (SwingConstants.TOP );
button.setHorizontalAlignment (SwingConstants.RIGHT );
button.setHorizontalTextPosition(SwingConstants.LEFT );
button.setVerticalTextPosition (SwingConstants.BOTTOM);
button.setIconTextGap(10);
// Создание большого элемента управления
button.setPreferredSize(new Dimension(300, 100));
container.add(button);
// Отключенная кнопка
button = new JButton("Выключено");
button.setEnabled(false);
container.add(button);
// Вывод окна на дисплей устройства
setSize(400, 350);
setVisible(true);
}
class ListenerAction implements ActionListener {
public void actionPerformed(ActionEvent e) {
System.out.println("Нажатие кнопки! От - "+
e.getActionCommand() + "\n");
}</code></pre>
<figure class="wp-block-image size-large"><img decoding="async" width="644" height="205" src="https://otus.ru/journal/wp-content/uploads/2022/01/fffffffffffffffffffffffffffffffffffff.jpg" alt="Работа с графическим интерфейсом в Джава: списки и Swing" class="wp-image-2670" srcset="https://otus.ru/journal/wp-content/uploads/2022/01/fffffffffffffffffffffffffffffffffffff.jpg 644w, https://otus.ru/journal/wp-content/uploads/2022/01/fffffffffffffffffffffffffffffffffffff-300x95.jpg 300w, https://otus.ru/journal/wp-content/uploads/2022/01/fffffffffffffffffffffffffffffffffffff-150x48.jpg 150w" sizes="(max-width: 644px) 100vw, 644px" /></figure>
<p>Это – пример использования JButton в Java. Если скомпилировать кодификацию, получится лицезреть несколько кнопок – обычную, синюю, с подписями «Изменение выравнивания» и «Выключено».</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B8_%D1%81%D0%B2%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%B0_%D1%81%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D1%8F"></span>Настройки, свойства, события<span class="ez-toc-section-end"></span></h3>
<p>Чтобы использовать список и создавать его, в первую очередь разбираются с кнопками. Вот пример настройки интерфейса оных:</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="948" height="130" src="https://otus.ru/journal/wp-content/uploads/2022/01/2-5.jpg" alt="Работа с графическим интерфейсом в Джава: списки и Swing" class="wp-image-2671" srcset="https://otus.ru/journal/wp-content/uploads/2022/01/2-5.jpg 948w, https://otus.ru/journal/wp-content/uploads/2022/01/2-5-300x41.jpg 300w, https://otus.ru/journal/wp-content/uploads/2022/01/2-5-150x21.jpg 150w, https://otus.ru/journal/wp-content/uploads/2022/01/2-5-768x105.jpg 768w" sizes="(max-width: 948px) 100vw, 948px" /></figure>
<p>А вот события, которые возникают при работе с рассматриваемым элементом управления:</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="943" height="132" src="https://otus.ru/journal/wp-content/uploads/2022/01/3-3.jpg" alt="Работа с графическим интерфейсом в Джава: списки и Swing" class="wp-image-2672" srcset="https://otus.ru/journal/wp-content/uploads/2022/01/3-3.jpg 943w, https://otus.ru/journal/wp-content/uploads/2022/01/3-3-300x42.jpg 300w, https://otus.ru/journal/wp-content/uploads/2022/01/3-3-150x21.jpg 150w, https://otus.ru/journal/wp-content/uploads/2022/01/3-3-768x108.jpg 768w" sizes="(max-width: 943px) 100vw, 943px" /></figure>
<p>А вот свойства, которые помогают изменять представление иконок:</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="944" height="138" src="https://otus.ru/journal/wp-content/uploads/2022/01/4-2.jpg" alt="Работа с графическим интерфейсом в Джава: списки и Swing" class="wp-image-2673" srcset="https://otus.ru/journal/wp-content/uploads/2022/01/4-2.jpg 944w, https://otus.ru/journal/wp-content/uploads/2022/01/4-2-300x44.jpg 300w, https://otus.ru/journal/wp-content/uploads/2022/01/4-2-150x22.jpg 150w, https://otus.ru/journal/wp-content/uploads/2022/01/4-2-768x112.jpg 768w" sizes="(max-width: 944px) 100vw, 944px" /></figure>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="_%D0%A1%D0%BF%D0%B8%D1%81%D0%BA%D0%B8_%E2%80%93_%D1%87%D1%82%D0%BE_%D0%B7%D0%BD%D0%B0%D1%82%D1%8C"></span> Списки – что знать<span class="ez-toc-section-end"></span></h2>
<p>Списки — элементы, применяемые на практике достаточно часто. В интерфейсе без них трудно представить сложную программу. Особенно это касается ПО, где можно что-либо выбирать или добавлять new позиции.</p>
<p>Они в Джаве бывают двух типов:</p>
<ul><li>JLists – обычные;</li><li>JComboBox – выпадающий.</li></ul>
<p>У списка (обычного new) два поставщика информации. Первый отвечает за реализацию интерфейса ListModel. В ней находятся элементы списка. Второй это работа с interface ListSelectionModel. Он отвечает за составляющими, которые выделены. Изначально включена поддержка самых важных способов выделения через DefaultListSelectionModel.</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="677" height="501" src="https://otus.ru/journal/wp-content/uploads/2022/01/5-2.jpg" alt="Работа с графическим интерфейсом в Джава: списки и Swing" class="wp-image-2674" srcset="https://otus.ru/journal/wp-content/uploads/2022/01/5-2.jpg 677w, https://otus.ru/journal/wp-content/uploads/2022/01/5-2-300x222.jpg 300w, https://otus.ru/journal/wp-content/uploads/2022/01/5-2-150x111.jpg 150w" sizes="(max-width: 677px) 100vw, 677px" /></figure>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="572" height="312" src="https://otus.ru/journal/wp-content/uploads/2022/01/6-2.jpg" alt="Работа с графическим интерфейсом в Джава: списки и Swing" class="wp-image-2675" srcset="https://otus.ru/journal/wp-content/uploads/2022/01/6-2.jpg 572w, https://otus.ru/journal/wp-content/uploads/2022/01/6-2-300x164.jpg 300w, https://otus.ru/journal/wp-content/uploads/2022/01/6-2-150x82.jpg 150w" sizes="(max-width: 572px) 100vw, 572px" /></figure>
<p>Вот пример использования обычного new списка и моделей Default. Это – самый простой вариант развития событий.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D1%81%D0%BF%D0%B8%D1%81%D0%BA%D0%BE%D0%B2"></span>Модели списков<span class="ez-toc-section-end"></span></h3>
<p>Имея дело со Swing, разрабу предстоит выучить много new информации. Лучше всего создавать списки и другие графические элементы через модели данных. Они дают разграничивать обработку информации от ее представления на дисплее.</p>
<h4 class="wp-block-heading"><span class="ez-toc-section" id="AbstractListModel"></span>AbstractListModel<span class="ez-toc-section-end"></span></h4>
<p>Первое, о чем необходимо помнить, желая создать new список. У ListModel всего 4 метода:</p>
<ul><li>присоединения и удаления слушателей – 2 штуки;</li><li>возврата элемента, находящегося в той или иной позиции списка;</li><li>уточнения количества составляющих модели.</li></ul>
<p>Чтобы работать со списками, Свинг обладает стандартной моделью информации DefaultListModel. Она позволяет хранить и корректировать данные предельно комфортно. Иногда требуется создавать собственные new модели данных. Пример – там, где информация располагается в нестандартной структуре.</p>
<p>DatabaseListModel – необходим для абстрактного класса моделей списков. Содержит информацию в динамическом массиве ArrayList.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%92%D1%8B%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5"></span>Выделение<span class="ez-toc-section-end"></span></h3>
<p>JList – это new список (или уже созданный список), у которого есть модель выделения. Называется DefaultListSelectionModel. Обладает несколькими режимами выделения составляющих списка. Вот режимы оных:</p>
<figure class="wp-block-table"><table><tbody><tr><td>Режим</td><td>За что отвечает</td></tr><tr><td>SINGLE_SELECTION</td><td>Выделяет один компонент списка</td></tr><tr><td>SINGLE_INTERVAL_SELECTION</td><td>Несколько смежных составляющих списка</td></tr><tr><td>MULTIPLE_INTERVAL_SELECTION</td><td>Несколько позиций списка произвольно</td></tr></tbody></table></figure>
<p>А вот самые распространенные методы модели выделения jlist-компонентов:</p>
<ul><li>setSelectedIndex (int idx) – один элемент в списке;</li><li>setSelectionInterval (int anchor, int lead) – несколько смежных компонентов;</li><li>addSelectionInterval (int anchor, int lead) – прибавление в имеющемуся выделению еще одну позицию;</li><li>setSelectedIndices (int[] rows) – несколько выделенных произвольно составляющих.</li></ul>
<p>Второй и третий варианты как параметры задействуют первые и последние выделяемые компоненты списка. Если оба одинаковые, выделится один «объект».</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="435" height="616" src="https://otus.ru/journal/wp-content/uploads/2022/01/7-1.jpg" alt="Работа с графическим интерфейсом в Джава: списки и Swing" class="wp-image-2676" srcset="https://otus.ru/journal/wp-content/uploads/2022/01/7-1.jpg 435w, https://otus.ru/journal/wp-content/uploads/2022/01/7-1-212x300.jpg 212w, https://otus.ru/journal/wp-content/uploads/2022/01/7-1-106x150.jpg 106w" sizes="(max-width: 435px) 100vw, 435px" /></figure>
<p>А вот наглядный пример реализации. Разобраться в нем, благодаря комментариям и предложенной информации, не так уж трудно.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9C%D0%B5%D1%82%D0%BE%D0%B4%D1%8B_%D0%BF%D0%BE%D0%BB%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE_%D0%B2%D1%8B%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%BD%D1%8B%D1%85_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82%D0%B0%D1%85"></span>Методы получения информации о выделенных компонентах<span class="ez-toc-section-end"></span></h3>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="927" height="102" src="https://otus.ru/journal/wp-content/uploads/2022/01/8-1.jpg" alt="Работа с графическим интерфейсом в Джава: списки и Swing" class="wp-image-2677" srcset="https://otus.ru/journal/wp-content/uploads/2022/01/8-1.jpg 927w, https://otus.ru/journal/wp-content/uploads/2022/01/8-1-300x33.jpg 300w, https://otus.ru/journal/wp-content/uploads/2022/01/8-1-150x17.jpg 150w, https://otus.ru/journal/wp-content/uploads/2022/01/8-1-768x85.jpg 768w" sizes="(max-width: 927px) 100vw, 927px" /></figure>
<p>Это – стандартные возможности, предусматриваемые DefaultListSelectionModel. Их достаточно для большинства new приложений и списков. Собственная модель может быть создана при помощи такого шаблона:</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="529" height="209" src="https://otus.ru/journal/wp-content/uploads/2022/01/9-1.jpg" alt="Работа с графическим интерфейсом в Джава: списки и Swing" class="wp-image-2678" srcset="https://otus.ru/journal/wp-content/uploads/2022/01/9-1.jpg 529w, https://otus.ru/journal/wp-content/uploads/2022/01/9-1-300x119.jpg 300w, https://otus.ru/journal/wp-content/uploads/2022/01/9-1-150x59.jpg 150w" sizes="(max-width: 529px) 100vw, 529px" /></figure>
<p>Тут предопределены два метода: добавление нового элемента выделения в списке к имеющемуся, а также определение интервала выделения.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B2%D0%B8%D0%B4%D0%B0"></span>Настройка вида<span class="ez-toc-section-end"></span></h3>
<p>Пример jlist в Java был представлен ранее. После того, как список будет создан, его можно откорректировать. Вот свойства и методы определения интерфейса списков:</p>
<figure class="wp-block-table"><table><tbody><tr><td>Свойства</td><td>Характеристика</td></tr><tr><td>background, foreground, font</td><td>Фон и цвет символов, шрифт</td></tr><tr><td>selectedBackground</td><td>Заливка выделенных составляющих</td></tr><tr><td>selectedForeground</td><td>Цветовая гамма символов выделенных компонентов</td></tr></tbody></table></figure>
<p>Данные свойства в списке (new или уже созданном ранее) помогут произвести стилистическую настройку.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A1%D0%BB%D1%83%D1%88%D0%B0%D1%82%D0%B5%D0%BB%D1%8C_%D1%81%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D0%B9"></span>Слушатель событий<span class="ez-toc-section-end"></span></h3>
<p>Списки jlist включают в себя стандартные события от клавиатуры и мыши. Относятся к базовому компоненту JComponent. Дополнительные события осуществляются непосредственно в моделях оного.</p>
<p>Здесь по умолчанию нет двойных щелчков мышкой. Средства по их определению тоже отсутствуют. Но при желании можно добавить их посредством слушателя обработки событий клавиш мышки.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%92%D1%8B%D0%BF%D0%B0%D0%B4%D0%B0%D1%8E%D1%89%D0%B8%D0%B9_%D1%81%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%E2%80%93_%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80_%D0%B8_%D0%BE%D1%81%D0%BE%D0%B1%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D0%B8"></span>Выпадающий список – пример и особенности<span class="ez-toc-section-end"></span></h2>
<p>Такой вариант позволяет выбирать один элемент из нескольких изначально доступных. За подобные действия в Swing отвечает JComboBox. В обычном состоянии он отображает только один компонент –тот, что был выбран. Альтернативы возникают во всплывающем окошке при раскрытии «перечня».</p>
<p>Особенности такого объекта:</p>
<ul><li>поддержка выбора одного компонента из представленных;</li><li>редактирование текущего элемента;</li><li>ввод собственных значений;</li><li>возможность поиска посредством клавиатуры.</li></ul>
<p>Использует подобный «перечень» одну модель – которая предоставляет сведения об элементах оного. Свойства модели определяются интерфейсом ComboBoxModel, который наследуется от ListModel.</p>
<p>Вот пример раскрывающегося перечня:</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="769" height="543" src="https://otus.ru/journal/wp-content/uploads/2022/01/10.jpg" alt="Работа с графическим интерфейсом в Джава: списки и Swing" class="wp-image-2679" srcset="https://otus.ru/journal/wp-content/uploads/2022/01/10.jpg 769w, https://otus.ru/journal/wp-content/uploads/2022/01/10-300x212.jpg 300w, https://otus.ru/journal/wp-content/uploads/2022/01/10-150x106.jpg 150w" sizes="(max-width: 769px) 100vw, 769px" /></figure>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="668" height="473" src="https://otus.ru/journal/wp-content/uploads/2022/01/11.jpg" alt="Работа с графическим интерфейсом в Джава: списки и Swing" class="wp-image-2680" srcset="https://otus.ru/journal/wp-content/uploads/2022/01/11.jpg 668w, https://otus.ru/journal/wp-content/uploads/2022/01/11-300x212.jpg 300w, https://otus.ru/journal/wp-content/uploads/2022/01/11-150x106.jpg 150w" sizes="(max-width: 668px) 100vw, 668px" /></figure>
<p>Результат будет таким:</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="440" height="347" src="https://otus.ru/journal/wp-content/uploads/2022/01/12.jpg" alt="Работа с графическим интерфейсом в Джава: списки и Swing" class="wp-image-2681" srcset="https://otus.ru/journal/wp-content/uploads/2022/01/12.jpg 440w, https://otus.ru/journal/wp-content/uploads/2022/01/12-300x237.jpg 300w, https://otus.ru/journal/wp-content/uploads/2022/01/12-150x118.jpg 150w" sizes="(max-width: 440px) 100vw, 440px" /></figure>
<p>С основами Swing покончено. А для того, чтобы лучше изучить данную область и такие фразы как new jpanel, int I, public static void, args, string, static void main, array и другие понятия программирования не вызывали никаких вопросов, стоит обратить внимание на специализированные курсы.</p>
<p>Они позволяют получить:</p>
<ul><li>новые выгодные и интересные знакомства;</li><li>опыт работы с Джавой и его инструментами;</li><li>сертификат по завершению обучения.</li></ul>
<p>Проводятся в очной и дистанционной формах. Могут запускаться в любое время, что делает такие курсы предельно удобными. new actionlistener и другие термины программирования не доставит никаких хлопот.</p>
<p>Обучение рассчитано на срок от нескольких месяцев до года. Курсы делятся по уровню навыков и знаний потенциального ученика.</p>
<figure class="wp-block-image size-large"><a href="https://otus.ru/lessons/java-specialization/?utm_source=oj&utm_medium=affilate&utm_campaign=java_bandle" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer"><img loading="lazy" decoding="async" width="970" height="90" src="https://otus.ru/journal/wp-content/uploads/2022/01/JavaSpec_Welcome_970x90-11.png" alt="Работа с графическим интерфейсом в Джава: списки и Swing" class="wp-image-2667" srcset="https://otus.ru/journal/wp-content/uploads/2022/01/JavaSpec_Welcome_970x90-11.png 970w, https://otus.ru/journal/wp-content/uploads/2022/01/JavaSpec_Welcome_970x90-11-300x28.png 300w, https://otus.ru/journal/wp-content/uploads/2022/01/JavaSpec_Welcome_970x90-11-150x14.png 150w, https://otus.ru/journal/wp-content/uploads/2022/01/JavaSpec_Welcome_970x90-11-768x71.png 768w" sizes="(max-width: 970px) 100vw, 970px" /></a></figure>
<p></p>
</div><!-- .post-content -->
<div class="the-post-foot cf">
<div class="tag-share cf">
<div class="post-tags"><a href="https://otus.ru/journal/tag/java/" rel="tag" data-wpel-link="internal">Java</a><a href="https://otus.ru/journal/tag/swing/" rel="tag" data-wpel-link="internal">Swing</a></div>
<div class="post-share">
<div class="post-share-icons cf">
<span class="counters">
</span>
<a href="https://www.facebook.com/sharer.php?u=https%3A%2F%2Fotus.ru%2Fjournal%2Frabota-s-graficheskim-interfejsom-v-dzhava-spiski-i-swing%2F" class="link facebook wpel-icon-right" target="_blank" title="Share on Facebook" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-facebook"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
<a href="https://twitter.com/intent/tweet?url=https%3A%2F%2Fotus.ru%2Fjournal%2Frabota-s-graficheskim-interfejsom-v-dzhava-spiski-i-swing%2F&text=%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%20%D1%81%20%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%BC%20%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81%D0%BE%D0%BC%20%D0%B2%20%D0%94%D0%B6%D0%B0%D0%B2%D0%B0%3A%20%D1%81%D0%BF%D0%B8%D1%81%D0%BA%D0%B8%20%D0%B8%20Swing" class="link twitter wpel-icon-right" target="_blank" title="Share on Twitter" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-twitter"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
<a href="https://www.linkedin.com/shareArticle?mini=true&url=https%3A%2F%2Fotus.ru%2Fjournal%2Frabota-s-graficheskim-interfejsom-v-dzhava-spiski-i-swing%2F" class="link linkedin wpel-icon-right" target="_blank" title="LinkedIn" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-linkedin"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
<a href="https://pinterest.com/pin/create/button/?url=https%3A%2F%2Fotus.ru%2Fjournal%2Frabota-s-graficheskim-interfejsom-v-dzhava-spiski-i-swing%2F&media=https%3A%2F%2Fotus.ru%2Fjournal%2Fwp-content%2Fuploads%2F2022%2F01%2Foj-1080x720-11.png&description=%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%20%D1%81%20%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%BC%20%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81%D0%BE%D0%BC%20%D0%B2%20%D0%94%D0%B6%D0%B0%D0%B2%D0%B0%3A%20%D1%81%D0%BF%D0%B8%D1%81%D0%BA%D0%B8%20%D0%B8%20Swing" class="link pinterest wpel-icon-right" target="_blank" title="Pinterest" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-pinterest-p"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
</div>
</div>
</div>
</div>
<div class="post-nav">
<div class="post previous cf">
<a href="https://otus.ru/journal/podgotovka-k-sobesedovaniju-po-dzhave-kak-prohodit-chto-sprashivajut-2/" title="Prev Post" class="nav-icon" data-wpel-link="internal">
<i class="fa fa-angle-left"></i>
</a>
<span class="content">
<a href="https://otus.ru/journal/podgotovka-k-sobesedovaniju-po-dzhave-kak-prohodit-chto-sprashivajut-2/" class="image-link" rel="previous" data-wpel-link="internal">
<img width="150" height="100" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20150%20100%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="attachment-thumbnail size-thumbnail lazyload wp-post-image" alt="Подготовка к собеседованию по Джаве: как проходит, что спрашивают-2" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2022/01/oj-1080x720-10-150x100.png 150w, https://otus.ru/journal/wp-content/uploads/2022/01/oj-1080x720-10-300x200.png 300w, https://otus.ru/journal/wp-content/uploads/2022/01/oj-1080x720-10-1024x683.png 1024w, https://otus.ru/journal/wp-content/uploads/2022/01/oj-1080x720-10-768x512.png 768w, https://otus.ru/journal/wp-content/uploads/2022/01/oj-1080x720-10-270x180.png 270w, https://otus.ru/journal/wp-content/uploads/2022/01/oj-1080x720-10-770x515.png 770w, https://otus.ru/journal/wp-content/uploads/2022/01/oj-1080x720-10-370x245.png 370w, https://otus.ru/journal/wp-content/uploads/2022/01/oj-1080x720-10.png 1080w" data-src="https://otus.ru/journal/wp-content/uploads/2022/01/oj-1080x720-10-150x100.png" data-sizes="(max-width: 150px) 100vw, 150px" title="Подготовка к собеседованию по Джаве: как проходит, что спрашивают-2" /> </a>
<div class="post-meta">
<span class="label">Prev Post</span>
<div class="post-meta post-meta-b">
<h2 class="post-title">
<a href="https://otus.ru/journal/podgotovka-k-sobesedovaniju-po-dzhave-kak-prohodit-chto-sprashivajut-2/" data-wpel-link="internal">Подготовка к собеседованию по Джаве: как проходит, что спрашивают-2</a>
</h2>
<div class="below">
<a href="https://otus.ru/journal/podgotovka-k-sobesedovaniju-po-dzhave-kak-prohodit-chto-sprashivajut-2/" class="meta-item date-link" data-wpel-link="internal"><time class="post-date" datetime="2022-01-11T17:20:14+00:00">11 января, 2022</time></a>
<span class="meta-sep"></span>
<span class="meta-item read-time">7 Mins Read</span>
</div>
</div> </div>
</span>
</div>
<div class="post next cf">
<a href="https://otus.ru/journal/dzhavaskript-vse-o-peremennyh/" title="Next Post" class="nav-icon" data-wpel-link="internal">
<i class="fa fa-angle-right"></i>
</a>
<span class="content">
<a href="https://otus.ru/journal/dzhavaskript-vse-o-peremennyh/" class="image-link" rel="next" data-wpel-link="internal">
<img width="150" height="100" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20150%20100%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="attachment-thumbnail size-thumbnail lazyload wp-post-image" alt="ДжаваСкрипт: все о переменных" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2022/01/oj-1080x720-12-150x100.png 150w, https://otus.ru/journal/wp-content/uploads/2022/01/oj-1080x720-12-300x200.png 300w, https://otus.ru/journal/wp-content/uploads/2022/01/oj-1080x720-12-1024x683.png 1024w, https://otus.ru/journal/wp-content/uploads/2022/01/oj-1080x720-12-768x512.png 768w, https://otus.ru/journal/wp-content/uploads/2022/01/oj-1080x720-12-270x180.png 270w, https://otus.ru/journal/wp-content/uploads/2022/01/oj-1080x720-12-770x515.png 770w, https://otus.ru/journal/wp-content/uploads/2022/01/oj-1080x720-12-370x245.png 370w, https://otus.ru/journal/wp-content/uploads/2022/01/oj-1080x720-12.png 1080w" data-src="https://otus.ru/journal/wp-content/uploads/2022/01/oj-1080x720-12-150x100.png" data-sizes="(max-width: 150px) 100vw, 150px" title="ДжаваСкрипт: все о переменных" /> </a>
<div class="post-meta">
<span class="label">Next Post</span>
<div class="post-meta post-meta-b">
<h2 class="post-title">
<a href="https://otus.ru/journal/dzhavaskript-vse-o-peremennyh/" data-wpel-link="internal">ДжаваСкрипт: все о переменных</a>
</h2>
<div class="below">
<a href="https://otus.ru/journal/dzhavaskript-vse-o-peremennyh/" class="meta-item date-link" data-wpel-link="internal"><time class="post-date" datetime="2022-01-11T17:43:52+00:00">11 января, 2022</time></a>
<span class="meta-sep"></span>
<span class="meta-item read-time">7 Mins Read</span>
</div>
</div> </div>
</span>
</div>
</div>
<section class="related-posts grid-3">
<h4 class="section-head"><span class="title">Читать ещё</span></h4>
<div class="ts-row posts cf">
<article class="post col-4">
<a href="https://otus.ru/journal/uroven-gotovnosti-cto-k-2026/" title="Уровень готовности CTO к 2026" class="image-link" data-wpel-link="internal">
<img width="270" height="180" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20270%20180%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="image lazyload wp-post-image" alt="Уровень готовности CTO к 2026" title="Уровень готовности CTO к 2026" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-270x180.jpg 270w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-770x515.jpg 770w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-370x245.jpg 370w" data-src="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-270x180.jpg" data-sizes="(max-width: 270px) 100vw, 270px" /> </a>
<div class="content">
<h3 class="post-title"><a href="https://otus.ru/journal/uroven-gotovnosti-cto-k-2026/" class="post-link" data-wpel-link="internal">Уровень готовности CTO к 2026</a></h3>
<div class="post-meta">
<time class="post-date" datetime="2025-11-16T19:50:59+00:00">16 ноября, 2025</time>
</div>
</div>
</article >
<article class="post col-4">
<a href="https://otus.ru/journal/novye-uroki-noyabrya-tolko-top-temy-po-programmirovaniju/" title="Новые уроки ноября: только топ-темы по программированию" class="image-link" data-wpel-link="internal">
<img width="270" height="180" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20270%20180%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="image lazyload wp-post-image" alt="Новые уроки ноября: только топ-темы по программированию" title="Новые уроки ноября: только топ-темы по программированию" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-270x180.jpg 270w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-770x515.jpg 770w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-370x245.jpg 370w" data-src="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-270x180.jpg" data-sizes="(max-width: 270px) 100vw, 270px" /> </a>
<div class="content">
<h3 class="post-title"><a href="https://otus.ru/journal/novye-uroki-noyabrya-tolko-top-temy-po-programmirovaniju/" class="post-link" data-wpel-link="internal">Новые уроки ноября: только топ-темы по программированию</a></h3>
<div class="post-meta">
<time class="post-date" datetime="2025-11-09T23:24:11+00:00">9 ноября, 2025</time>
</div>
</div>
</article >
<article class="post col-4">
<a href="https://otus.ru/journal/schjot-idjot-na-chasy/" title="Счёт идёт на часы" class="image-link" data-wpel-link="internal">
<img width="270" height="180" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20270%20180%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="image lazyload wp-post-image" alt="Счёт идёт на часы" title="Счёт идёт на часы" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-270x180.png 270w, https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-770x515.png 770w, https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-370x245.png 370w" data-src="https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-270x180.png" data-sizes="(max-width: 270px) 100vw, 270px" /> </a>
<div class="content">
<h3 class="post-title"><a href="https://otus.ru/journal/schjot-idjot-na-chasy/" class="post-link" data-wpel-link="internal">Счёт идёт на часы</a></h3>
<div class="post-meta">
<time class="post-date" datetime="2025-10-30T15:04:59+00:00">30 октября, 2025</time>
</div>
</div>
</article >
</div>
</section>
</article> <!-- .the-post -->
</div>
<aside class="col-4 sidebar">
<div class="inner">
<ul>
<li id="search-2" class="widget widget_search"><h5 class="widget-title"><span>Поиск по блогу</span></h5>
<form method="get" class="search-form" action="https://otus.ru/journal/">
<label>
<span class="screen-reader-text">Search for:</span>
<input type="search" class="search-field" placeholder="Введите запрос и нажмите Enter" value="" name="s" title="Search for:" />
</label>
<button type="submit" class="search-submit"><i class="fa fa-search"></i></button>
</form>
</li>
<li id="tag_cloud-5" class="widget widget_tag_cloud"><h5 class="widget-title"><span>Метки</span></h5><div class="tagcloud"><a href="https://otus.ru/journal/tag/android-2/" class="tag-cloud-link tag-link-74 tag-link-position-1" style="font-size: 12.472222222222pt;" aria-label="Android (34 элемента)" data-wpel-link="internal">Android</a>
<a href="https://otus.ru/journal/tag/c-3/" class="tag-cloud-link tag-link-91 tag-link-position-2" style="font-size: 10.916666666667pt;" aria-label="C (23 элемента)" data-wpel-link="internal">C</a>
<a href="https://otus.ru/journal/tag/c-2/" class="tag-cloud-link tag-link-81 tag-link-position-3" style="font-size: 12.666666666667pt;" aria-label="C# (35 элементов)" data-wpel-link="internal">C#</a>
<a href="https://otus.ru/journal/tag/c/" class="tag-cloud-link tag-link-20 tag-link-position-4" style="font-size: 12.472222222222pt;" aria-label="c++ (34 элемента)" data-wpel-link="internal">c++</a>
<a href="https://otus.ru/journal/tag/computer-science/" class="tag-cloud-link tag-link-209 tag-link-position-5" style="font-size: 15.972222222222pt;" aria-label="computer science (78 элементов)" data-wpel-link="internal">computer science</a>
<a href="https://otus.ru/journal/tag/css/" class="tag-cloud-link tag-link-288 tag-link-position-6" style="font-size: 8.6805555555556pt;" aria-label="CSS (13 элементов)" data-wpel-link="internal">CSS</a>
<a href="https://otus.ru/journal/tag/data-science/" class="tag-cloud-link tag-link-151 tag-link-position-7" style="font-size: 8pt;" aria-label="Data Science (11 элементов)" data-wpel-link="internal">Data Science</a>
<a href="https://otus.ru/journal/tag/devops/" class="tag-cloud-link tag-link-98 tag-link-position-8" style="font-size: 10.138888888889pt;" aria-label="devops (19 элементов)" data-wpel-link="internal">devops</a>
<a href="https://otus.ru/journal/tag/docker/" class="tag-cloud-link tag-link-143 tag-link-position-9" style="font-size: 8.2916666666667pt;" aria-label="Docker (12 элементов)" data-wpel-link="internal">Docker</a>
<a href="https://otus.ru/journal/tag/gamedev/" class="tag-cloud-link tag-link-25 tag-link-position-10" style="font-size: 11.694444444444pt;" aria-label="gamedev (28 элементов)" data-wpel-link="internal">gamedev</a>
<a href="https://otus.ru/journal/tag/hr/" class="tag-cloud-link tag-link-103 tag-link-position-11" style="font-size: 8pt;" aria-label="hr (11 элементов)" data-wpel-link="internal">hr</a>
<a href="https://otus.ru/journal/tag/html/" class="tag-cloud-link tag-link-217 tag-link-position-12" style="font-size: 11.208333333333pt;" aria-label="HTML (25 элементов)" data-wpel-link="internal">HTML</a>
<a href="https://otus.ru/journal/tag/ios/" class="tag-cloud-link tag-link-101 tag-link-position-13" style="font-size: 8.9722222222222pt;" aria-label="iOS (14 элементов)" data-wpel-link="internal">iOS</a>
<a href="https://otus.ru/journal/tag/it/" class="tag-cloud-link tag-link-50 tag-link-position-14" style="font-size: 10.527777777778pt;" aria-label="IT (21 элемент)" data-wpel-link="internal">IT</a>
<a href="https://otus.ru/journal/tag/java/" class="tag-cloud-link tag-link-75 tag-link-position-15" style="font-size: 15.680555555556pt;" aria-label="Java (73 элемента)" data-wpel-link="internal">Java</a>
<a href="https://otus.ru/journal/tag/javascript/" class="tag-cloud-link tag-link-83 tag-link-position-16" style="font-size: 14.319444444444pt;" aria-label="JavaScript (53 элемента)" data-wpel-link="internal">JavaScript</a>
<a href="https://otus.ru/journal/tag/linux/" class="tag-cloud-link tag-link-141 tag-link-position-17" style="font-size: 11.888888888889pt;" aria-label="Linux (29 элементов)" data-wpel-link="internal">Linux</a>
<a href="https://otus.ru/journal/tag/machine-learning/" class="tag-cloud-link tag-link-167 tag-link-position-18" style="font-size: 8.6805555555556pt;" aria-label="Machine Learning (13 элементов)" data-wpel-link="internal">Machine Learning</a>
<a href="https://otus.ru/journal/tag/otus-book/" class="tag-cloud-link tag-link-261 tag-link-position-19" style="font-size: 9.9444444444444pt;" aria-label="otus book (18 элементов)" data-wpel-link="internal">otus book</a>
<a href="https://otus.ru/journal/tag/php/" class="tag-cloud-link tag-link-45 tag-link-position-20" style="font-size: 10.527777777778pt;" aria-label="PHP (21 элемент)" data-wpel-link="internal">PHP</a>
<a href="https://otus.ru/journal/tag/python/" class="tag-cloud-link tag-link-27 tag-link-position-21" style="font-size: 16.944444444444pt;" aria-label="Python (99 элементов)" data-wpel-link="internal">Python</a>
<a href="https://otus.ru/journal/tag/qa/" class="tag-cloud-link tag-link-155 tag-link-position-22" style="font-size: 11.402777777778pt;" aria-label="qa (26 элементов)" data-wpel-link="internal">qa</a>
<a href="https://otus.ru/journal/tag/sql/" class="tag-cloud-link tag-link-38 tag-link-position-23" style="font-size: 12.861111111111pt;" aria-label="SQL (37 элементов)" data-wpel-link="internal">SQL</a>
<a href="https://otus.ru/journal/tag/team-lead/" class="tag-cloud-link tag-link-364 tag-link-position-24" style="font-size: 9.9444444444444pt;" aria-label="team lead (18 элементов)" data-wpel-link="internal">team lead</a>
<a href="https://otus.ru/journal/tag/unity/" class="tag-cloud-link tag-link-24 tag-link-position-25" style="font-size: 8pt;" aria-label="unity (11 элементов)" data-wpel-link="internal">unity</a>
<a href="https://otus.ru/journal/tag/algoritmy/" class="tag-cloud-link tag-link-30 tag-link-position-26" style="font-size: 9.9444444444444pt;" aria-label="Алгоритмы (18 элементов)" data-wpel-link="internal">Алгоритмы</a>
<a href="https://otus.ru/journal/tag/bazy-dannyh/" class="tag-cloud-link tag-link-40 tag-link-position-27" style="font-size: 10.138888888889pt;" aria-label="Базы данных (19 элементов)" data-wpel-link="internal">Базы данных</a>
<a href="https://otus.ru/journal/tag/matematika/" class="tag-cloud-link tag-link-44 tag-link-position-28" style="font-size: 10.916666666667pt;" aria-label="Математика (23 элемента)" data-wpel-link="internal">Математика</a>
<a href="https://otus.ru/journal/tag/arhitektura-po/" class="tag-cloud-link tag-link-10 tag-link-position-29" style="font-size: 9.4583333333333pt;" aria-label="архитектура ПО (16 элементов)" data-wpel-link="internal">архитектура ПО</a>
<a href="https://otus.ru/journal/tag/bazy-dannyh-2/" class="tag-cloud-link tag-link-251 tag-link-position-30" style="font-size: 10.138888888889pt;" aria-label="базы данных (19 элементов)" data-wpel-link="internal">базы данных</a>
<a href="https://otus.ru/journal/tag/vebinar/" class="tag-cloud-link tag-link-201 tag-link-position-31" style="font-size: 13.930555555556pt;" aria-label="вебинар (48 элементов)" data-wpel-link="internal">вебинар</a>
<a href="https://otus.ru/journal/tag/dajdzhest/" class="tag-cloud-link tag-link-308 tag-link-position-32" style="font-size: 10.722222222222pt;" aria-label="дайджест (22 элемента)" data-wpel-link="internal">дайджест</a>
<a href="https://otus.ru/journal/tag/zapis-vebinara/" class="tag-cloud-link tag-link-226 tag-link-position-33" style="font-size: 14.902777777778pt;" aria-label="запись вебинара (61 элемент)" data-wpel-link="internal">запись вебинара</a>
<a href="https://otus.ru/journal/tag/zapis-uroka/" class="tag-cloud-link tag-link-272 tag-link-position-34" style="font-size: 16.069444444444pt;" aria-label="запись урока (80 элементов)" data-wpel-link="internal">запись урока</a>
<a href="https://otus.ru/journal/tag/informacionnaya-bezopasnost/" class="tag-cloud-link tag-link-232 tag-link-position-35" style="font-size: 10.138888888889pt;" aria-label="информационная безопасность (19 элементов)" data-wpel-link="internal">информационная безопасность</a>
<a href="https://otus.ru/journal/tag/karera-v-it/" class="tag-cloud-link tag-link-292 tag-link-position-36" style="font-size: 9.9444444444444pt;" aria-label="карьера в IT (18 элементов)" data-wpel-link="internal">карьера в IT</a>
<a href="https://otus.ru/journal/tag/podborka/" class="tag-cloud-link tag-link-7 tag-link-position-37" style="font-size: 12.666666666667pt;" aria-label="подборка (35 элементов)" data-wpel-link="internal">подборка</a>
<a href="https://otus.ru/journal/tag/podborka-statej/" class="tag-cloud-link tag-link-219 tag-link-position-38" style="font-size: 15.777777777778pt;" aria-label="подборка статей (75 элементов)" data-wpel-link="internal">подборка статей</a>
<a href="https://otus.ru/journal/tag/programmirovanie/" class="tag-cloud-link tag-link-65 tag-link-position-39" style="font-size: 22pt;" aria-label="программирование (332 элемента)" data-wpel-link="internal">программирование</a>
<a href="https://otus.ru/journal/tag/proekt/" class="tag-cloud-link tag-link-321 tag-link-position-40" style="font-size: 11.888888888889pt;" aria-label="проект (29 элементов)" data-wpel-link="internal">проект</a>
<a href="https://otus.ru/journal/tag/proektnaya-rabota/" class="tag-cloud-link tag-link-310 tag-link-position-41" style="font-size: 11.597222222222pt;" aria-label="проектная работа (27 элементов)" data-wpel-link="internal">проектная работа</a>
<a href="https://otus.ru/journal/tag/seti/" class="tag-cloud-link tag-link-181 tag-link-position-42" style="font-size: 12.958333333333pt;" aria-label="сети (38 элементов)" data-wpel-link="internal">сети</a>
<a href="https://otus.ru/journal/tag/testirovanie/" class="tag-cloud-link tag-link-69 tag-link-position-43" style="font-size: 13.930555555556pt;" aria-label="тестирование (48 элементов)" data-wpel-link="internal">тестирование</a>
<a href="https://otus.ru/journal/tag/upravlenie-komandoj/" class="tag-cloud-link tag-link-63 tag-link-position-44" style="font-size: 11.694444444444pt;" aria-label="управление командой (28 элементов)" data-wpel-link="internal">управление командой</a>
<a href="https://otus.ru/journal/tag/habr-2/" class="tag-cloud-link tag-link-203 tag-link-position-45" style="font-size: 13.930555555556pt;" aria-label="хабр (48 элементов)" data-wpel-link="internal">хабр</a></div>
</li>
</ul>
</div>
</aside>
</div> <!-- .ts-row -->
</div> <!-- .main -->
<footer class="main-footer dark bold">
<section class="lower-footer cf">
<div class="wrap">
<div class="links">
<div class="menu-menju-navykov-container"><ul id="menu-menju-navykov-1" class="menu"><li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10413"><a href="https://otus.ru/categories/programming/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Программирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10414"><a href="https://otus.ru/categories/architecture/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Архитектура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10415"><a href="https://otus.ru/categories/operations/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Инфраструктура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10416"><a href="https://otus.ru/categories/information-security-courses/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Безопасность<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10417"><a href="https://otus.ru/categories/data-science/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Data Science<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10418"><a href="https://otus.ru/categories/gamedev/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">GameDev<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10419"><a href="https://otus.ru/categories/marketing-business/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Управление<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10420"><a href="https://otus.ru/categories/analytics/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Аналитика и анализ<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10421"><a href="https://otus.ru/categories/testing/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Тестирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
</ul></div> </div>
<p class="copyright"> © 2015-2026 OTUS </p>
<div class="to-top">
<a href="#" class="back-to-top"><i class="fa fa-angle-up"></i> Top</a>
</div>
</div>
</section>
</footer>
</div> <!-- .main-wrap -->
<div class="mobile-menu-container off-canvas" id="mobile-menu">
<a href="#" class="close"><i class="fa fa-times"></i></a>
<div class="logo">
</div>
<ul class="mobile-menu"></ul>
</div>
<div class="search-modal-wrap">
<div class="search-modal-box" role="dialog" aria-modal="true">
<form method="get" class="search-form" action="https://otus.ru/journal/">
<input type="search" class="search-field" name="s" placeholder="Search..." value="" required />
<button type="submit" class="search-submit visuallyhidden">Submit</button>
<p class="message">
Type above and press <em>Enter</em> to search. Press <em>Esc</em> to cancel. </p>
</form>
</div>
</div>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/clearfy/components/comments-plus/assets/js/url-span.js" id="wbcr-comments-plus-url-span-js"></script>
<script type="text/javascript" id="ez-toc-scroll-scriptjs-js-extra">
/* <![CDATA[ */
var eztoc_smooth_local = {"scroll_offset":"30"};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/assets/js/smooth_scroll.min.js" id="ez-toc-scroll-scriptjs-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/vendor/js-cookie/js.cookie.min.js" id="ez-toc-js-cookie-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/vendor/sticky-kit/jquery.sticky-kit.min.js" id="ez-toc-jquery-sticky-kit-js"></script>
<script type="text/javascript" id="ez-toc-js-js-extra">
/* <![CDATA[ */
var ezTOC = {"smooth_scroll":"1","visibility_hide_by_default":"","scroll_offset":"30","fallbackIcon":"<span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span>"};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/assets/js/front.min.js" id="ez-toc-js-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/custom-script.js" id="custom-script-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/magnific-popup.js" id="magnific-popup-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/jquery.fitvids.js" id="jquery-fitvids-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/imagesloaded.min.js" id="imagesloaded-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/object-fit-images.js" id="object-fit-images-js"></script>
<script type="text/javascript" id="contentberg-theme-js-extra">
/* <![CDATA[ */
var Bunyad = {"custom_ajax_url":"\/journal\/rabota-s-graficheskim-interfejsom-v-dzhava-spiski-i-swing\/"};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/theme.js" id="contentberg-theme-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/theia-sticky-sidebar.js" id="theia-sticky-sidebar-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/jquery.slick.js" id="jquery-slick-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/jarallax.js" id="jarallax-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/masonry.min.js" id="masonry-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/jquery/jquery.masonry.min.js" id="jquery-masonry-js"></script>
</body>
</html>
<!-- Cache served by breeze CACHE - Last modified: Tue, 10 Mar 2026 08:20:49 GMT -->