Аналог windows forms для java

Обновлено: 08.07.2024

Графический интерфейс пользователя (GUI) предоставляет программистам графический интерфейс, изначально он был разработан для программистов для создания общего графического интерфейса, чтобы он мог работать на всех платформах, но базовый класс AWT (Abstract Window Tool) в Java 1.0 (Box) не соответствовал этому требованию, поэтому появился Swing, это расширенный компонент, образованный AWT, но он не может полностью заменить AWT, эти два компонента должны появляться в графическом пользовательском интерфейсе одновременно.

Качели компонентов

Исходный компонент AWT происходит из пакета java.awt. Когда приложение Java, содержащее компонент AWT, выполняется на разных платформах, отображение компонента GUI каждой платформы будет отличаться, но приложение, разработанное Swing, будет работать на другой платформе. Таким образом, вы можете унифицировать стиль отображения компонентов GUI, потому что компоненты Swing позволяют программистам определять единый внешний вид на разных платформах.

Компоненты Swing часто называют «облегченными компонентами», потому что они полностью написаны на языке Java, и Java не зависит от языка операционной системы. Он может работать на любой платформе; вместо этого компоненты, которые зависят от собственной платформы, называются «Тяжелые компоненты», такие как компоненты AWT, полагаются на оконную систему собственной платформы для определения функции, внешнего вида и стиля компонента. Компоненты Swing имеют следующие характеристики:

Съемные компоненты кожи

Качели сумка

Чтобы эффективно использовать компоненты Swing, вы должны понимать иерархию и наследование пакетов Swing, наиболее важными из которых являются класс Component, класс Container и класс JComponent. Отношения наследования этих классов следующие:

javax.swing.JComponent наследуется от:

Класс javax.awt.Container наследуется от:

В компонентах Swing большинство компонентов GUI являются прямыми или косвенными подклассами класса Component. Класс JComponent является местом хранения различных функций компонента Swing. Характеристики этих компонентов включают установку границ компонентов и автоматическую прокрутку компонентов GUI.

Наиболее важным компонентом в компоненте Swing является родительский класс Container, а класс Container имеет два важных подкласса, а именно java.awt.Window и java.awt.Frame, за исключением того, что предыдущие компоненты класса AWT наследуют эти два класса. Кроме того, текущий компонент Swing расширяет эти два класса.

Общая форма

Формы как носители компонентов в приложениях Swing занимают очень важное положение. Обычно используемые формы в Swing включают JFrame и JDialog.

Форма JFrame

Форма JFrame является контейнером, она является носителем различных компонентов в программе Swing, JFrame можно рассматривать как контейнер, содержащий компоненты Swing для крови. При разработке приложения вы можете создать форму, унаследовав класс java.swing.JFrame. Добавьте компоненты к этой форме и установите события для компонентов.

Поскольку форма наследует класс JFrame, у нее есть такие кнопки, как «Развернуть», «Свернуть» и «Закрыть».

Далее будет подробно объяснено использование форм JFrame в приложениях Java.

Синтаксис JFrame в программе выглядит следующим образом:

Значение параметров следующее:

jf: объект класса JFrame

container: объект класса Container можно получить, вызвав метод getContentPane () с использованием объекта JFrame.

Компоненты Swing-форм обычно связаны с компонентами и контейнерами, поэтому после создания объекта JFrame необходимо вызвать метод getContentPane (), чтобы преобразовать форму в контейнер, а затем добавить компоненты в контейнер или установить менеджер макета.

Обычно этот контейнер используется для хранения и отображения компонентов. Если вам нужно добавить компонент в контейнер, вы можете установить его, используя метод add из класса Container. Например:

После добавления компонентов в контейнер эти компоненты также можно удалить из контейнера с помощью метода Remove () класса Container, например:

В следующем примере реализуется объект JFrame для создания формы и добавления к ней компонента.


В приведенном выше примере класс Example1 наследует класс JFrame. В методе CreateJFrame () создается экземпляр объекта JFrame. Общие методы построения класса JFrame включают следующие две формы:

Два метода построения в классе JFrame - это метод построения без параметров и метод параметризации.

Первая форма построения может создать новую форму, которая изначально невидима и не имеет заголовка;

Вторая форма конструктора создает невидимую форму с заголовком, когда создается экземпляр объекта JFrame.

Вы можете использовать объект JFrame для вызова метода show (), чтобы сделать форму видимой, но этот метод был заменен методом setVisible (true) в версии JDK.

В то же время вы можете использовать метод setSize (int i, int j), чтобы установить размер формы, где переменные x и y представляют ширину и высоту формы соответственно.

После создания формы вам нужно предоставить форму для закрытия. Вы можете вызвать метод setDefaultCloseOPeration (), чтобы закрыть форму. Java предоставляет несколько способов закрыть форму, следующие четыре обычно используются;

DO_NOTHING_ON_CLOSE

DISPOSE_ON_CLOSE)

HIDE_ON_CLOSE

EXIT_ON_CLOSE

JDialog

Форма JDialog - это диалоговое окно в компоненте Swing, оно наследует класс java.awt.Dialog в компоненте AWT.

Функция формы JDialog состоит в том, чтобы вызывать другую форму из другой формы, подобно диалоговому окну OK, которое появляется при использовании Internet Explorer. Форма JDialog, по сути, является другим типом формы. Она похожа на форму JFrame. При ее использовании необходимо вызвать метод getCOntentPane () для преобразования формы в контейнер, а затем установить свойства формы в контейнере.

Чтобы создать форму JDialog в приложении, вам нужно создать экземпляр класса JDialog, как правило, используются следующие конструкторы класса JDialog.

  • public JDialog (): создать диалог без заголовка и подчиненной формы
  • public JDialog (Frame f): создает диалог, который указывает родительскую форму, но у диалога нет заголовка
  • public JDialog (Frame f, логическая модель): создает диалог указанного типа и указывает родительскую форму, но форма не указывает заголовок.
  • public JDialog (Frame f, String title): создать диалог с указанным заголовком и родительской формой
  • public JDialog (Frame f, String title, логическая модель): создает диалоговое окно с указанным заголовком, родительской формой и режимом

Давайте посмотрим на пример:

В этом примере, чтобы сделать родительскую форму диалога всплывающей, определяется форма JFrame. Сначала в форме определяется кнопка, а затем к ней добавляется событие щелчка. В событии click мы использовали новый оператор MyJDialog (). SetVisible (true), чтобы сделать диалоговое окно видимым, реализовав таким образом функцию всплывающего диалогового окна после отдельной кнопки.

В классе MyDialog, поскольку он наследует класс JDialog, вы можете использовать ключевое слово super в конструкторе для вызова конструктора JDialog.

Здесь мы используем piublic JDialog (Frame f, заголовок String, логическая модель). Этот метод построения формы устанавливает пользовательскую форму JFrame и соответственно заголовок и тип формы диалогового окна.

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

вы говорите о GUI builder?

есть много строителей GUI там. Некоторые Иды, как в NetBeans приходите с nice GUI builders для Java.

в сообществе Java есть опции для "универсальных загрузок", как вы упомянули. Они там, они просто не так публичны, как Visual Studio. EasyEclipse одна из моих любимых.

Я сделал справедливый бит работы (>4 лет) на обеих платформах, и самая большая разница, которую я нашел, не столько с языками как таковыми, но со всей средой разработки. В частности:

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

Мне кажется, лучший и простой способ получить то, что вы хотите, это использовать в NetBeans (JDK 6u14 с пакетом IDE 6.5.1 NetBeans).

Он имеет как JDK, так и IDE в одной загрузке. И он имеет простой и очень хороший GUI builder.

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

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

лично я не начинал с GUI. Я начал с BlueJ, бесплатный" обучающий " компилятор для Java-кода.

нет программист в мире знает любой язык 100%. Все они сидят в своем офисе и играют со stackoverflow и google весь день. Помните, Google - ваш лучший друг! (Может быть, немного кофе тоже !)

Если у вас есть Java в вашем браузере, все, что вам нужно, это последний пакет Eclipse.

используя Netbeans, вы можете создать Java на основе Swing GUIs довольно легко. Netbeans поставляется с довольно хорошим GUI builder.

Если вы узнаете, как программировать на Java, я не думаю, что это действительно будет так много, чтобы создавать приложения Java Swing с нуля. Это просто вопрос изучения библиотек Swing.

вы можете сделать это с помощью построителей на любом языке без написания кода.

Netbeans-это то же самое для Java.

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

с помощью Netbeans. Вам нужно установить два программного обеспечения.

все из которых я не нашел простых инструкций.

но я действительно хотел изучить Java.

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

совсем немного, я думаю.

Я действительно не хочу учиться создавать пользовательский интерфейс и новый язык.

вы можете использовать GUI builder для компоновки ваших окон, но если вы хотите, чтобы ваша программа сделала что-то полезное, вам придется сделать некоторые программирования на языке.

Я бы предпочел просто сосредоточиться на самом коде.

это, кажется, противоречит всему, что вы только что сказали. Вы не можете сосредоточиться на коде, не изучив язык.

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

Я нашел это для разработки Java-приложений winform для вас . пожалуйста, проверьте

JFormDesigner™ является профессиональным дизайнером GUI для пользовательских интерфейсов Java™ Swing. Его выдающаяся поддержка Jgoodies FormLayout, GroupLayout (бесплатный дизайн), TableLayout и GridBagLayout позволяет легко создавать профессионально выглядящие формы.

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

Объединение всех этих компонентов создает графический интерфейс пользователя.

Что такое Swing в Java?

Создавать приложения становится проще, поскольку у нас уже есть компоненты GUI, такие как кнопка, флажок и т. д.

Контейнерный класс

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

Ниже приведены три типа контейнерных классов:

Разница между AWT и Swing

Иерархия

иерархия swing

Объяснение: Все компоненты в свинге, такие как JButton, JComboBox, JList, JLabel, унаследованы от класса JComponent, который можно добавить в классы контейнера.

JButton Class

Он используется для создания помеченной кнопки. Использование ActionListener приведет к некоторым действиям при нажатии кнопки. Он наследует класс AbstractButton и не зависит от платформы.

JTextField Class

Он наследует класс JTextComponent и используется для редактирования однострочного текста.

создание поля редактируемого текста

JScrollBar Class

Он используется для добавления полосы прокрутки, как горизонтальной, так и вертикальной.

пример JScrollBar

JPanel Class

Он наследует класс JComponent и предоставляет пространство для приложения, которое может присоединить любой другой компонент.

компонент JPanel

JMenu Class

Он наследует класс JMenuItem и является компонентом выпадающего меню, которое отображается из строки меню.

выпадающее меню

Вывод:

Класс JList

Он наследует класс JComponent, объект класса JList представляет список текстовых элементов.

Класс JList

Вывод:

JLabel Class

Используется для размещения текста в контейнере. Он также наследует класс JComponent.

размещение текста в контейнере

Вывод:

JComboBox Class

Он наследует класс JComponent и используется для отображения всплывающего меню выбора.

отображения всплывающего меню java

Вывод:

Для размещения компонентов внутри контейнера мы используем менеджер макета. Ниже приведены несколько менеджеров макетов:

Макет границы

Макет потока

Макет потока

FlowLayout просто кладет компоненты в ряд один за другим, это менеджер компоновки по умолчанию для каждого JPanel.

GridBag Layout

GridBagLayout размещает компоненты в сетке

GridBagLayout размещает компоненты в сетке, что позволяет компонентам охватывать более одной ячейки.

Пример: фрейм чата

чат на Java пример

Это простой пример создания GUI с использованием Swing в Java.

Средняя оценка / 5. Количество голосов:

Спасибо, помогите другим - напишите комментарий, добавьте информации к статье.

AWT была первой попыткой Sun создать графический интерфейс для Java. Они пошли легким путем и просто сделали прослойку на Java, которая вызывает методы из библиотек, написанных на С. Библиотечные методы создают и используют графические компоненты операционной среды. С одной стороны, это хорошо, так как программа на Java похожа на остальные программы в рамках данной ОС. Но с другой стороны, нет никакой гарантии, что различия в размерах компонентов и шрифтах не испортят внешний вид программы при запуске ее на другой платформе. Кроме того, чтобы обеспечить мультиплатформенность, пришлось унифицировать интерфейсы вызовов компонентов, из-за чего их функциональность получилась немного урезанной. Да и набор компонентов получился довольно небольшой. К примеру, в AWT нет таблиц, а в кнопках не поддерживается отображение иконок.

Использованные ресурсы AWT старается освобождать автоматически. Это немного усложняет архитектуру и влияет на производительность. Освоить AWT довольно просто, но написать что-то сложное будет несколько затруднительно. Сейчас ее используют разве что для апплетов.

Достоинства:

  • часть JDK;
  • скорость работы;
  • графические компоненты похожи на стандартные.

Недостатки:

  • использование нативных компонентов налагает ограничения на использование их свойств. Некоторые компоненты могут вообще не работать на «неродных» платформах;
  • некоторые свойства, такие как иконки и всплывающие подсказки, в AWT вообще отсутствуют;
  • стандартных компонентов AWT очень немного, программисту приходится реализовывать много кастомных;
  • программа выглядит по-разному на разных платформах (может быть кривоватой).

заключение:

В настоящее время AWT используется крайне редко — в основном в старых проектах и апплетах. Oracle припрятал обучалки и всячески поощряет переход на Swing. Оно и понятно, прямой доступ к компонентам оси может стать серьезной дырой в безопасности.

Как выглядит Swing

Как выглядит Swing

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

Тем не менее благодаря простоте использования, богатой документации и гибкости компонентов Swing стал, пожалуй, самым популярным графическим фреймворком в Java. На его базе появилось много расширений, таких как SwingX, JGoodies, которые значительно упрощают создание сложных пользовательских интерфейсов. Практически все популярные среды программирования Java включают графические редакторы для Swing-форм. Поэтому разобраться и начать использовать Swing не составит особого труда.

Достоинства:

Недостатки:

  • окно с множеством компонентов начинает подтормаживать;
  • работа с менеджерами компоновки может стать настоящим кошмаром в сложных интерфейсах.

Заключение:

Swing жил, Swing жив, Swing будет жить. Хотя Oracle и старается продвигать JavaFX, на сегодняшний день Swing остается самым популярным фреймворком для создания пользовательских интерфейсов на Java.

Как выглядит SWT

Как
выглядит
SWT

SWT был разработан в компании IBM в те времена, когда Swing еще был медленным, и сделано это было в основном для продвижения среды программирования Eclipse. SWT, как и AWT, использует компоненты операционной системы, но для каждой платформы у него созданы свои интерфейсы взаимодействия. Так что для каждой новой системы тебе придется поставлять отдельную JAR-библиотеку с подходящей версией SWT. Это позволило более полно использовать существующие функции компонентов на каждой оси. Недостающие функции и компоненты были реализованы с помощью 2D, как в Swing. У SWT есть много приверженцев, но, положа руку на сердце, нельзя не согласиться, что получилось не так все просто, как хотелось бы. Новичку придется затратить на изучение SWT намного больше времени, чем на знакомство с тем же Swing. Кроме того, SWT возлагает задачу освобождения ресурсов на программиста, в связи с чем ему нужно быть особенно внимательным при написании кода, чтобы случайное исключение не привело к утечкам памяти.

Достоинства:

  • использует компоненты операционной системы — скорость выше;
  • Eclipse предоставляет визуальный редактор форм;
  • обширная документация и множество примеров;
  • возможно использование AWT- и Swing-компонентов.

Недостатки:

  • для каждой платформы необходимо поставлять отдельную библиотеку;
  • нужно все время следить за использованием ресурсов и вовремя их освобождать;
  • сложная архитектура, навевающая суицидальные мысли после тщетных попыток реализовать кастомный интерфейс.

Заключение:

Видно, что в IBM старались. Но получилось уж очень на любителя…

Как выглядит JavaFX

Как выглядит JavaFX

JavaFX можно без преувеличения назвать прорывом. Для отрисовки используется графический конвейер, что значительно ускоряет работу приложения. Набор встроенных компонентов обширен, есть даже отдельные компоненты для отрисовки графиков. Реализована поддержка мультимедийного контента, множества эффектов отображения, анимации и даже мультитач. Внешний вид всех компонентов можно легко изменить с помощью CSS-стилей. И самое прекрасное — в JavaFX входит набор утилит, которые позволяют сделать родной инсталлятор для самых популярных платформ: exe или msi для Windows, deb или rpm для Linux, dmg для Mac. На сайте Oracle можно найти подробную документацию и огромное количество готовых примеров. Это превращает программирование с JavaFX в легкое и приятное занятие.

Достоинства:

  • быстрая работа за счет графического конвейера;
  • множество различных компонентов;
  • поддержка стилей;
  • утилиты для создания установщика программы;
  • приложение можно запускать как десктопное и в браузере как часть страницы.

Недостатки:

  • фреймворк еще разрабатывается, поэтому случаются и падения и некоторые глюки;
  • JavaFX пока не получил широкого распространения.

Заключение:

Хорошая работа, Oracle. Фреймворк оставляет только позитивные впечатления. Разобраться несложно, методы и интерфейсы выглядят логичными. Хочется пользоваться снова и снова!

SWT: погодный виджет

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

И начнем, пожалуй, с самого популярного виджета — отображения текущей погоды, для реализации которого выберем SWT.

Любая программа на SWT начинается с создания объекта Display. Он служит своеобразным контекстом приложения, который содержит необходимые методы для обращения к ресурсам системы и обеспечивает цикл событий. Следующим шагом будет создание не менее важного объекта Shell. Shell представляет собой обычное окно операционной системы. В конструктор shell передается Display, чтобы создать окно верхнего уровня.

Так как мы создаем виджет, нам не нужно отображать стандартное обрамление окна и кнопки управления, для этого мы указали флаг NO_TRIM. Для фона мы будем использовать картинку — прямоугольник с закругленными углами. В принципе, окно SWT может принимать любые формы. Чтобы добиться такого эффекта, используем класс Region. Все, что нужно, — добавить в этот класс все видимые точки из картинки фона, пропуская прозрачные.

В изображениях разных форматов прозрачность задается по-разному, поэтому и извлекается информация о прозрачных областях тоже не одинаково. Создаем область фона и добавляем туда все видимые точки:

Устанавливаем форму окна:

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

Итак, по нажатию на клавишу Esc окно закроется. При нажатии левой клавиши мыши на области окна запомним координаты нажатия. При движении мыши с зажатой левой клавишей — передвигаем окно на экране соответственно движению. При событии перерисовки — рисуем картинку фона, используя графический контекст GC.

Назначим слушатель соответствующим событиям окна:

Устанавливаем размер окна равным размеру изображения:

Открываем окно и запускаем цикл событий:

Не забываем в конце освободить использованные ресурсы:

Запустив программу на этом этапе, мы получим прямоугольничек, который можно двигать мышкой и закрывать по Esc.

Настало время добавить содержания. Будем отображать текущую погоду в виде иконки состояния (солнечно, дождь, снег…), показаний температуры и времени последнего обновления.

Для расположения графических компонентов в окне в нужном виде используются менеджеры компоновки. Менеджер компоновки занимается не только расположением компонентов, но и изменением их размеров при изменении размеров окна. Для нашего виджета будем использовать GridLayout. Этот менеджер располагает компоненты в ячейках воображаемой таблицы. Создаем GridBagLayout на две колонки с различной шириной колонок (флаг false в конструкторе), устанавливаем его в качестве менеджера компоновки окна:

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

Флаги в классе GridData означают, что метка будет располагаться слева вверху, будет растягиваться горизонтально и вертикально (флаги, установленные в true) при наличии свободного места и занимает одну строку и один столбец таблицы компоновки.

В SWT нет прозрачного фона компонентов, и позади картинки статуса будет красоваться белый фон, чего, конечно, не хотелось бы. Поэтому создадим объект Color с цветом фона окна:

В конце программы этот объект также необходимо очистить, вызвав метод dispose. Устанавливаем цвет фона и картинку статуса, которую можно загрузить из файла точно так же, как мы загрузили картинку фона вначале:

Теперь добавим Label с текущей температурой и расположим его в правой верхней части окна:

Установим какую-нибудь температуру:

Для записи температуры по Цельсию используется юникодный номер соответствующего символа со служебными символами \u.

Шрифт по умолчанию для текстовых меток слишком маленький. Так что создадим новый, побольше:

FontData[] fD = temperatureLabel.getFont().getFontData(); fD[0].setHeight(30); fD[0].setStyle(SWT.BOLD); Font newFont = new Font(display, fD[0]); temperatureLabel.setFont(newFont); Шрифт, как и другие ресурсные объекты, нужно освобождать. Для этого воспользуемся слушателем события разрушения метки:

Наконец, добавим метку с описанием погодных условий:

Текст может быть довольно длинным, так что при создании метки указываем флаг WRAP, чтобы текст автоматически разбивался на несколько строк при нехватке места. Расположим компонент по центру и разрешим ему заполнить все горизонтальное пространство. Также укажем, что компонент занимает два столбца таблицы компоновки. Запускаем и получаем окошко с картинки «Виджет погоды».

Виджет погоды

Виджет погоды

Теперь можно прикрутить какой-нибудь сервис погоды, создать таймер для автоматического обновления — и виджет готов.

На Swing мы напишем виджет для отображения RSS-новостей. Начинаем, как и в прошлый раз, с создания окна. Класс, реализующий функционал стандартного окна в Swing, называется JFrame. По умолчанию закрытие окна приложения в Swing не приводит к остановке программы, так что лучше прописать, как должно себя вести окно при закрытии:

Для представления новостей лучше всего подходит таблица. Swing построен на паттерне «Модель —представление — контроллер» (MVC). В архитектуре MVC модель предоставляет данные, представление отвечает за отображение данных (например, текст, поля ввода), а контроллер обеспечивает взаимодействие между моделью и представлением. Таблица хорошо демонстрирует этот подход. Для представления данных используется класс, реализующий интерфейс TableModel.

Для хранения информации о доступных новостях заведем класс FeedMessage c полями для названия статьи и даты выхода:

Чтобы упростить и ускорить разработку, наследуем нашу модель данных от класса AbstractTableModel, который предлагает готовую реализацию почти всех методов интерфейса TableModel.

Метод fireTableDataChanged сообщает представлению, что модель данных изменилась и необходима перерисовка.

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

Теперь займемся внешним видом ячеек. Swing позволяет назначать отдельные классы представления для разных типов данных. За отрисовку отдельных ячеек таблицы отвечает класс, наследующий интерфейс TableCellRenderer. По умолчанию используется DefaultTableCellRenderer, который представляет собой текстовую метку.

Назначим свой отрисовщик ячейки для данных типа String. Изменим стандартный цвет шрифта и сделаем чередующийся цвет фона, чтобы улучшить читаемость.

Чтобы таблица начала использовать наш отрисовщик, необходимо добавить метод, который возвращает тип данных для каждой ячейки, в модель данных:

Новостей может быть много, поэтому поместим таблицу на панель прокрутки и сделаем ползунок прокрутки невидимым, чтобы он не портил нам дизайн виджета:

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

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

В отличие от SWT, объекты «цвет» и «шрифт» освобождаются автоматически, так что можно больше не переживать за утечки памяти.

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

Теперь поменяем форму окна на прямоугольник с закругленными углами. Лучше всего это делать в слушателе компонента, так как, если размер окна изменится, форма окна будет правильно пересчитана:

Устанавливаем размер окна, убираем обрамление и делаем окно полупрозрачным.

Наконец, открываем окно в графическом потоке. SwingUtilities.invokeLater(new Runnable() < public void run() < frame.setVisible(true); >>);

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

Виджет новостей

Виджет новостей

И наконец, гвоздь сезона — JavaFX. Воспользуемся его мультимедийными возможностями и компонентом для построения графиков и сделаем простенький эквалайзер.

Для начала наследуем класс виджета от Application. Это основной класс приложения в JavaFX. Application содержит основные методы жизненного цикла приложения. Компоненты формы создаются в методе start, аргументом которому служит класс Stage. Stage представляет собой окно программы. Изменим стиль окна на TRANSPARENT, чтобы убрать обрамление и кнопки. В Stage помещается класс Scene, в котором задаются размеры окна и цвет фона. В Scene, в свою очередь, передаем класс Group, в который будем помещать дочерние компоненты:

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

Заполняем диаграмму начальными данными:

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

Добавляем оба компонента к группе:

Назначаем слушателей мыши к группе, чтобы двигать окно по экрану:

Загружаем песню в плеер:

Добавляем слушатель, который будет обновлять столбиковую диаграмму:

Делаем сцену видимой и запускаем песню:

И наслаждаемся такой вот красотой.

Простой эквалайзер

Простой эквалайзер

Как видишь, остается все меньше того, что не под силу Java. Кроме описанных графических библиотек, есть еще множество других, не таких распространенных, но не обязательно худших по качеству. У каждой из них есть свои сильные и слабые стороны. Java предоставляет право выбора тебе :).

Читайте также: