Что за программа swing

Я работаю со Swing с перерывами пару лет. В основном, по вечерам. Пишу программу Visual Watermark для групповой защиты фотографий. Java версия у меня появилась в 2011. Мне захотелось сделать порт под Mac и вылизать интерфейс, но писать отдельную программу под каждую платформу у меня не было никакой возможности.

  • QML был весь в багах: меню появлялись под компонентами, демка падала, поддержки в QtCreator не было. Ускоренная отрисовка появилась только в Qt5 прошлой осенью.
  • Qt не подошел, т.к. был целиком на “нативных” компонентах, а часто требовалось где-то изменить отрисовку.
  • Juce подходила по функционалу, не глючила и не падала. Стоила приемлемых денег да еще и с открытым кода. Отпугнул меня C++. Это замечательный язык на котором пишут огромное количество умнейших людей. Учитывая мой маленький опыт и размер задачи, сложность C++ – это перебор. Плюс, выяснилось, что Xcode не умеет рефакторить C++.
  • Adobe Air не поддерживает multi-threading.
  • Mono+GTK Мне кажется, что к эту комбинация могла бы решить мои проблемы. В тот момент отпугнул очевидный косяк с неработающими горячими клавишами в GTK. Судя по MonoDevelop, он не пофикшен до сих пор.
  • JavaFX не было под Mac.
  • SWT намного легче, чем Swing и в целом хорош. Не стал писать на SWT потому, что смотрел я его самым последним. Уже было потрачена уйма времени и я закончил эксперименты на первом попавшемся баге («плавали» кнопки по высоте на тулбаре).

На сегодняшний день в QML и JavaFX исправлены описанные проблемы. Поэтому, если вы готовы работать со сценическим графом, то вам стоит взять их на тест-драйв.

Что такое FAKE BoS ? | ЧТО такое SWING high и Low | SMART MONEY | ОБУЧЕНИЕ ТРЕЙДИНГУ С НУЛЯ

Qt перешел под крыло фирмы Digia. Выпуск бета-версии под iPhone и Android дает надежду на дальнейшее развитие библиотеки.

JavaFX стала библиотекой с открытым кодом в феврале этого года. Её совместимость с OpenJDK планируется на JDK 9. Когда выйдет 9ка неизвестно. Релиз 8ой версии запланирован на начало 2014 года.

О хорошем

Начну с хорошего. Вдруг подумаете, что я тоже в Swing-хейтеры записался?!

Вся отрисовка hardware-accelerated. Любое Swing-приложение отрисовывается на GPU, от разработчика ничего не требуется. Это делает возможным анимации в приложении. В том числе, когда приложение полноэкранное или развернуто на 24’’ мониторе.

MVC. Swing критикуют за массивность: каждые компонент состои из представления, контроллера и модели. В то же время, это дает возможность быстро добавить нужную фичу в существущий компонент. Все очень гибко.

Java – это managed код. Вы избавляетесь от кучи возможных багов, «доступных» только для C++-разработчиков. Риск Access Violation сведен к минимуму. Хотя это совершенно не означает, что у вас не будет других багов. Утечек памяти, например.

Отличная среда разработки. Eclipse, Intellij IDEA, NetBeans – выбор огромный. Везде есть рефакторинги, форматирование кода, авто-комплит, поддержка unit-тестов,

Очень много библиотек. LayoutManager’ы, работа с нативными объектами, строками, вебом – всего не перечислить. Это огромный козырь Java как платформы.

Нужно ли учить Swing/SWT? А Java FX?

Очень много ответов на вопросы. Вот, например, доля вопросов на StackOverflow по каждой из UI-библиотек.

Примерно каждый сотый вопрос на StackOverflow – это вопрос о Swing. На практике, это означает, что большинство проблем уже решены. Скорее всего, один-на-один с проблемой вы не останетесь.

О плохом

Предыдущая часть похожа на сладкий пресс-релиз. Исправляюсь. Вот с чем вы можете столкнуться.

Не фиксятся критичные баги. File.exists не работает с момента релиза JDK7 и фикса нет до сих пор. Даже если баг критический, вы можете ждать фикса годами.

Ситуация может стать еще хуже, если вы планируете использовать нативный код. Я столкнулся с ситуацией, когда использование модальных окон (например, открытие OpenFileDialog) приводит к зависаниям на некоторых компьютерах. При том, что Java Native Foundation используется согласно примерам в документации. И баунти на StackOverflow мне не помог:-)

Баг с file.exists можно обойти с помощью классов из java.nio. Это новый API, который был призван решить проблемы производительности с развесистыми папками.

  1. Запустить приложение с параметром –Dfile.encoding=UTF-8
  2. Вместо File.exists используем Files.exists(Paths.get(fileName))
  3. Вместо File.listFiles используем

try (DirectoryStream ds = Files.newDirectoryStream(folder)) < for (Path file : ds) < // do something >> catch (IOException e)

Swing – только hardware accelerated. Это значит ваше приложение не будет работать в VMware, Parallels или через удаленный рабочий стол. Если вы не готовы с этим мириться, то смотрите в сторону SWT.

Нет 32-битных билдов под Mac. Официальная сборка только 64 бит. К сожалению, я не знаю в чем причина этого решения. Могу лишь гадать, что дело в каких-то багах.

Некоторое время Henri Gomez поддерживал 32-битные и universal билды. Готовые билды можно было скачать с его странички на code.google.com. К моему сожалению, нехватка времени и новая работа заставили Генри свернуть этот проект. Попрощавшись, он выложил свои билдежные скрипты на GitHub:
https://github.com/hgomez/obuildfactory

С их помощью можно собрать OpenJDK под Mac и Linux. Здорово, но не совсем. С помощью этих скриптов 32-битная версия под Mac не собирается. Внутри JDK огромное количество конфигурационных файлов, в которых зашита сборка строго 64-битной версии для Mac. Изменишь ключ в главном файле и получишь неработоспособную сборку.

Каким образом Henri Gomez собирал 32-битные билды мне неизвестно.

Включайте JRE в дистрибутив. Мнение руководителей Oracle о дистрибуции приложений: “standalone self-contained инсталлятор с bundled JRE для целевой платформы – это более удачная модель распространения приложений” (источник). Наиболее вероятная причина этого решения – огромное кол-во уязвимостей в апплетах: Java приняла знамя решета у Flash.

Читайте также:
Программа версус что это

Наиболее жестко поддерживает это ограничение фирма Apple, которая удалила Java в версии Mac OS 10.7 Lion. Также они принудительно отключают ее при установке новых системных обновлений.

JRE 7 весит около 100 Мб. В архиве получается около 50. К сожалению, размер JRE от апдейта к апдейту растет и нам проблему распухшего дистрибутива придется решать.

Не все объекты BufferedImage используют аппаратное ускорение. Только для BufferedImage.TYPE_INT_*. Поэтому, начиная с JDK7, работать с TYPE_4BYTE*, TYPE_3BYTE нецелосообразно.

При доступе к данным растра BufferedImage, картинка перестает рисоваться через GPU. Зачем это сделано понятно: пользователь меняет данные, метода “закончил менять” нет и не понятно когда их пере-заливать в видео-память. По крайней мере, это логично.

В Visual Watermark я использовал C++ библиотеку для загрузки изображений и нужно было полученные пикселы превратить в объект BufferedImage. Менять по-одному пикселу очень медленно и пришлось писать напрямую в буфер растра картинки. Как только я вызвал у растра getData(), все мои картинки перестали ускоряться. Покопавшись в коде DataBufferInt, я нашел решение этой проблемы с помощью reflection и написал небольшой класс-помощник:

import java.awt.*; import java.awt.image.*; import java.lang.reflect.Field; import sun.awt.image.SunWritableRaster; import sun.java2d.StateTrackableDelegate; // Standard library prevents image acceleration once getData() method is called // This class provides a workaround to modify data quickly and still get hw-accel graphics public class AcceleratedImage < // Returns data object not preventing hardware image acceleration public static int[] getDataBuffer(DataBufferInt dataBuffer) < try < Field field = DataBufferInt.class.getDeclaredField(«data»); field.setAccessible(true); int[] data = (int[])field.get(dataBuffer); return data; >catch (Exception e) < return null; >> // Marks the buffer dirty. You should call this method after changing the data buffer public static void markDirty(DataBufferInt dataBuffer) < try < Field field = DataBuffer.class.getDeclaredField(«theTrackable»); field.setAccessible(true); StateTrackableDelegate theTrackable = (StateTrackableDelegate)field.get(dataBuffer); theTrackable.markDirty(); >catch (Exception e) < >> // Checks whether current image is in acceleratable state public static boolean isAcceleratableImage(BufferedImage img) < try < Field field = DataBuffer.class.getDeclaredField(«theTrackable»); field.setAccessible(true); StateTrackableDelegate trackable = (StateTrackableDelegate)field.get(img.getRaster().getDataBuffer()); if (trackable.getState() == sun.java2d.StateTrackable.State.UNTRACKABLE) return false; field = SunWritableRaster.class.getDeclaredField(«theTrackable»); field.setAccessible(true); trackable = (StateTrackableDelegate)field.get(img.getRaster()); return trackable.getState() != sun.java2d.StateTrackable.State.UNTRACKABLE; >catch(Exception e) < return false; >> public static BufferedImage convertToAcceleratedImage(Graphics _g, BufferedImage img) < if(!(_g instanceof Graphics2D)) return img; // We cannot obtain required information from Graphics object Graphics2D g = (Graphics2D)_g; GraphicsConfiguration gc = g.getDeviceConfiguration(); if (img.getColorModel().equals(gc.getColorModel()) isAcceleratableImage(img)) return img; BufferedImage tmp = gc.createCompatibleImage(img.getWidth(), img.getHeight(), img.getTransparency()); Graphics2D tmpGraphics = tmp.createGraphics(); tmpGraphics.drawImage(img, 0, 0, null); tmpGraphics.dispose(); img.flush(); return tmp; >>

Использовать его нужно вот так:

DataBufferInt dataBuffer = (DataBufferInt)bufferedImage.getRaster().getDataBuffer(); int[] data = AcceleratedImage.getDataBuffer(dataBuffer); // Меняем данные AcceleratedImage.markDirty(dataBuffer);

Я не проверял этот код для изображений, которые уже были выведены на экран.

  1. Можно сделать анимацию компоентов.
  2. Из-за простоты класса, делать ее очень долго.

Чаще всего используется анимация положения и полу-прозрачности. Если с контролем положения в Swing все OK, то полу-прозрачность стандартные компоненты не поддерживают. Проблема не в возможностях графического движка, а в том, что компоненты не имеют свойства getAlpha/setAlpha.

Java-приложение не будет запускаться в Mountain Lion из-за GateKeeper. Чтобы решить эту проблему вам нужно подписаться на программу Mac Developer за $99/год. В замен фирма Apple выдаст вам сертифакт для подписи кода и проблема уйдет.
Подписать бандл с приложением можно вот так:
codesign –s “Developer ID” –f “path-to-my-app.app”

В сумме

На мой взгляд, самый главный минус Swing – это неуверенность в будущем платформы, т.к критичные баги остаются открытыми. Своих фиксов дожидаются только уязвимость в браузерных плагинах. Складывается ощущение, что библиотеку бросили. Все остальные проблемы уже не так важны.

И мне будет очень грустно, если это действительно так. Потому что писать десктоп приложения на Swing быстро, просто и вокруг огромное количество готового и бесплатного кода.

Пока у меня остается надежда, что у разработчиков в Oracle появится время, чтобы решить системные проблемы.

UPDATE: Из комментариев выяснил, что кастомизация контролов в Qt возможна:

Спасибо пользователю silvansky
UPDATE: Пользователь Skyggedans заметил, что в Air появилась поддержка много-поточности. Делается она за счет дополнительных SWF файлов, с которыми можно настроить коммуникацию.

  • java
  • swing
  • кроссплатформенная разработка
  • кросс-платформенность.

Источник: habr.com

Самоучитель Java Swing: Как создать приложение с графическим интерфейсом на Java

Swing в Java — это инструментарий графического интерфейса пользователя (GUI), включающий компоненты GUI. Swing предоставляет богатый выбор виджетов и пакетов для создания изысканных компонентов GUI для Java-приложений.

Swing является частью Java Foundation Classes(JFC), который представляет собой API для программирования GUI на Java, обеспечивающий графический интерфейс пользователя. Библиотека Java Swing построена поверх Java Abstract Widget Toolkit (AWT), более старого, зависящего от платформы набора инструментов GUI. Вы можете использовать простые компоненты программирования графического интерфейса Java, такие как кнопки, текстовые поля и т.д., из библиотеки, и вам не придется создавать компоненты с нуля.

В этом учебнике по Java Swing вы узнаете основы Java GUI, такие как.

  • Что такое Swing в Java?
  • Что такое класс-контейнер?
  • Что такое графический интерфейс пользователя в Java?
  • Как создать графический интерфейс пользователя в Java на примере
  • Менеджер макетов Java
  • Java BorderLayout
  • Java FlowLayout
  • Java GridBagLayout

Иерархическая диаграмма классов Java Swing

Самоучитель Java Swing: Как создать приложение с графическим интерфейсом на Java

Иерархическая диаграмма классов Java Swing

Все компоненты в Java Swing являются JComponent, которые могут быть добавлены в контейнерные классы.

Что такое класс контейнер?

Классы-контейнеры — это классы, на которых могут располагаться другие компоненты. Поэтому для создания графического интерфейса Java Swing нам нужен хотя бы один объект-контейнер. Существует 3 типа контейнеров Java Swing.

  1. Панель: Это чистый контейнер, который сам по себе не является окном. Единственная цель панели — организовать компоненты на окне.
  2. Фрейм (Frame): Это полностью функционирующее окно с заголовком и значками.
  3. Диалог: Его можно представить как всплывающее окно, которое появляется, когда необходимо отобразить сообщение. Это не полностью функционирующее окно, как фрейм.
Читайте также:
Что за программа genopro

Что такое графический интерфейс пользователя в Java?

GUI (графический интерфейс пользователя) в Java — это простой в использовании конструктор визуального восприятия для Java-приложений. Он состоит в основном из графических компонентов, таких как кнопки, ярлыки, окна и т.д., с помощью которых пользователь может взаимодействовать с приложением. GUI играет важную роль в создании простых интерфейсов для Java-приложений.

Как создать графический интерфейс пользователя в Java на примере

В данном учебнике по графическому интерфейсу Java, давайте разберемся, как создать графический интерфейс на Java на примере Swings.

Шаг 1) Скопируйте код в редактор
На первом этапе скопируйте следующий код в редактор.

Источник: pro-java.ru

Работа с графическим интерфейсом в Джава: списки и Swing

Приложение – это не только программный код. При написании любой программы необходимо позаботиться о так называемом графическом интерфейсе. Говоря простыми словами – то, как будет выглядеть контент.

Программное обеспечение создается для того, чтобы им могли пользоваться не только опытные программеры, но и обычные ПК пользователи. Поэтому графическая составляющая при коддинге крайне важна. Для ее реализации в языках программирования есть библиотеки, а также дополнительные утилиты. В данной статье будет рассказано о том, как создавать списки в Java, а также работать со Swing.

Определение

Swing – простой инструмент Джавы, оснащенный графическим интерфейсом. Обладает огромным количество виджетов для того, чтобы создавать разнообразное программное обеспечение. Является частью JFC. Основывается на AWT API.

Ключевым преимуществом является то, что данный инструментарий полностью написан на Java. Это позволяет полноценно использовать возможности «утилиты» при коддинге на соответствующем языке программирования. Обладает легкими компонентами и никак не зависит от задействованной платформы.

  • «перечисления»;
  • флажки;
  • кнопки;
  • иные элементы интерфейса, которые может использовать простой пользователь.

Swing – библиотека, предназначенная для формирования графического интерфейса на Джаве. Схож с AWT по предназначению, но обладает рядом отличительных преимуществ.

AWT или Swing: ключевые отличия

Для того, чтобы создать new interface, можно использовать обе «технологии». Но, чтобы итоговый продукт был максимально комфортным и легким для понимания, предстоит остановиться на одном из предложенных вариантов.

Реализация поставленной задачи зависит от того, насколько хорошо разработчик понимает, что такое AWT и Swing. Таблица ниже поможет разобраться в разнице между соответствующими инструментами.

AWT Swing
Чувствительна к платформе, на которой запускается Платформо-независимый вариант
Отсутствует соответствие 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(«Синяя кнопка»); // 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

Читайте также:
Программа 1c что это

Это – пример использования 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 и другие термины программирования не доставит никаких хлопот.

Обучение рассчитано на срок от нескольких месяцев до года. Курсы делятся по уровню навыков и знаний потенциального ученика.

Источник: otus.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru