- 1
про свинг
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
0
про свинг
песня про это дело
MAKAKA # 0
У нас есть:
guest # 0 ⇈
Fike # 0 ⇈
guest # 0 ⇈
invalidate
validate
все три есть
defecatinho # 0
guest # 0 ⇈
Оу
3наешь что это?
TEH3OPHblu_nemyx # 0 ⇈
guest # 0 ⇈
а goat.se это сайт про козочек
java awt, java swing
Desktop # 0 ⇈
М-м-м
https://i.pinimg.com/736x/a1/f8/e7/a1f8e7ed3a0cf60bb759062aeb56a452--abba-costumes-mama-mia.jpg
defecatinho # 0 ⇈
guest # 0 ⇈
guest # 0 ⇈
guest # 0
guest # 0
Один коммент -- один факт про свинг.
guest # 0
друга, использующего API OS для рисования настоящего окна.
Это паттерн bridge, когда иерархия компонентов имела параллельную
иерархию пиров -- нативных компонентов на C++, использующих
API OS.
Каждый нативный компонент был окном с точки зрения ОС. В винде
они были видны через Spy++, на X11 через xwininfo итд.
В какой-то момент оказалось, что компонентов мало (наибольший
общий делитель всех окружений), и выглядят они везде по разному.
guest # 0 ⇈
WinForms используют настоящие окна, потому каждая ``System.Windows.Froms.Button`` видна в Spy++, а в WPF нет, потому ``System.Windows.Controls.Button`` не видна.
Всем насрать на десктопный гуй (если это не QT) в 2020, да?
guest # 0
он написан поверх AWT, и с точки зрения OS не виден.
Каждый swing компонент имеет префикс J: Button это AWT (с пиром)
а JButton -- чисто свинговый компонент.
Свинговые стали называть lightweight, а AWTшные -- heavyweight.
У свингового приложения есть один нативный (heavyweight) компонент
с окном ОС, а в нем рисуются lightweight (невидимые ОС) компоненты.
guest # 0
Сначала хотели использовать MVC, но затем поняли, что Controller
(слушающий поведение пользователя) и VIEW связаны между собой,
и сделали так:
Компонент Swing представляет API программисту, а рисование и получение
событий от пользователя делегирует "UI": UI назвали Pluggable Look and Feel.
L and F устанавливаются с помощью setUI, и рисуют компоненты.
Есть LF Metal, есть Motif, есть а-ля-windows. Все они по сути библиотеки
рисования компонентов, и разумеется не видимы с точки зрения OS.
guest # 0
его своим дочерним компонентам. По умолчанию события замаскированы,
но если добавить слушателя -- они расмаскируются.
guest # 0
событя можно только на UI треде.
Тред отвечает на запросы ОС о перерисовке, так что тяжелые операции
надо выносить в другой тред (к счастью, джава умеет нативные потоки).
guest # 0
в памяти, а затем RepaintManager копирует их на экран.
guest # 0
Можно конечно физически задать размер и расположение, но это не удобно.
Тогда сделали так: каждый компонент имеет методы, чтобы сообщить
желаемые размеры, а в контейнер добавляется LayoutManager, котррый
на основе этих данных и распологает каждый компонент.
LayoutManagerов очень много разных: можно распологать последовательно,
табличкой, кусочками итд.
guest # 0
Помните, что такое "апплеты"?
TEH3OPHblu_nemyx # 0
TOPT # 0
MAKAKA # 0 ⇈
TOPT # 0 ⇈
А так я пользоваться fltk4
TEH3OPHblu_nemyx # 0 ⇈
MAKAKA # 0 ⇈
wxы очень крутые: они имеют крестовый и API и привязку для каждой скриптушни, и при этом они используют нативные окна окружения, потому везде выглядят как родное приложение.
Причем на маке у них были бекенды для карбона (переходного API, в котором приложения выглядят как классика), а на юниксе они умеют gtk, tq, motif и прямо голые иксы.
Идея сама по себе очень крутая. К сожалению, построить настоящий кросс-платформенный на нативных компонентах, не являющийся при этом говном, невозможно, потому что на каждой платформе свои правила.
Но для маленьких утилиток это охуенно имхо.
TEH3OPHblu_nemyx # 0 ⇈
Например, был «eMule» — клиент p2p-сетей «ed2k» и «Kad». Существовал он только под «Windows», потому что его морда использовала «MFC».
Потом добровольцы его переписали с «MFC» на «wxWidgets», и так появился «AMule» на других платформах. Там многие интерфейсы похожи (нужно в именах классов заменить «C» на «wx»), но иногда бывают неприятности вроде другого количества аргументов у методов или не совсем совпадающих типов, когда приходится патчить вручную.
«wxWidgets» ещё кучу компиляторов поддерживают...
Похуже дела обстоят с портами «ATL». Хотя я давно смотрел, может быть, сейчас получше.
guest # 0 ⇈
TEH3OPHblu_nemyx # 0 ⇈