look and feel что такое
look and feel
Смотреть что такое «look and feel» в других словарях:
Look and feel — is a term used in descriptions of products and fields such as marketing, branding and trademarking, to signify the experience a person has using a product, and the main features of its appearance and interfaces.In software design, look and feel… … Wikipedia
Look and Feel — [dt. »Aussehen und Eindruck«], ein von der Firma Lotus geprägter Begriff, der das optische Erscheinungsbild sowie die Bedienungseigenschaften einer Benutzeroberfläche beschreibt. Anlass für die Einführung des Begriffs war ein Streit von Lotus… … Universal-Lexikon
look and feel — UK US noun [singular] business the qualities of a website such as how attractive it looks, how easy it is for customers to use, and how successful it is in giving customers a particular opinion about the company Thesaurus: internethyponym … Useful english dictionary
Look and Feel — Zu Aussehen und Handhabung vieler Desktops gehört, dass Fenster durch ein oben rechts enthaltenes X schließbar sind. Der Begriff Look and Feel (LAF; dt. Aussehen und Handhabung, „Anfühlen“, Anmutung) bezeichnet standardisierte Design Aspekte in… … Deutsch Wikipedia
Look And Feel — Der Begriff Look and Feel (LAF; dt. Aussehen und Handhabung, „Anfühlen“, Anmutung) bezeichnet meist durch Hersteller oder Konsortien standardisierte Design Aspekte einer Software, wie zum Beispiel Farben, Layout, Fontgröße, die Benutzung von… … Deutsch Wikipedia
Look and feel — Aspect et convivialité L aspect et la convivialité d une interface graphique (en anglais look and feel) est l ensemble des spécificités et caractéristiques d une interface qui lui donnent une identité et qui peut être perçu de différentes… … Wikipédia en Français
look and feel — /ˌlυk ən fi:l/ noun the appeal of the design, layout and ease of use of a website to potential customers and the way the site fits the image the company is trying to put across … Marketing dictionary in english
look and feel — noun The combination of the visual design and behaviour of a user interface … Wiktionary
look and feel — UK / US noun [singular] business the qualities of a website such as how attractive it looks, how easy it is for customers to use, and how successful it is in giving customers a particular opinion about the company … English dictionary
look and feel — ● ►en loc. m. ►SOC Les caractéristiques spécifiques de l interface d un produit … Dictionnaire d’informatique francophone
look and feel
1 look and feel
2 look and feel
3 look-and- feel
4 look-and-feel
5 look-and-feel
6 look-and-feel
7 look-and-feel
8 look-and-feel
9 look-and-feel
10 look-and- feel
11 look & feel
интерфейс
Графический дизайн официального веб-сайта ОКОИ, включая такие элементы как цвета, формы, верстку и шрифты, а также функционирование динамических элементов — кнопок, окон и меню.
[ Департамент лингвистических услуг Оргкомитета «Сочи 2014». Глоссарий терминов ]
look & feel
Graphical design of the OCOG official website, including elements such as colors, shapes, layout, and typefaces (the Look), as well as the behavior of dynamic elements such as buttons, boxes, and menus (the Feel).
[ Департамент лингвистических услуг Оргкомитета «Сочи 2014». Глоссарий терминов ]
Тематики
См. также в других словарях:
Look and feel — is a term used in descriptions of products and fields such as marketing, branding and trademarking, to signify the experience a person has using a product, and the main features of its appearance and interfaces.In software design, look and feel… … Wikipedia
Look and Feel — [dt. »Aussehen und Eindruck«], ein von der Firma Lotus geprägter Begriff, der das optische Erscheinungsbild sowie die Bedienungseigenschaften einer Benutzeroberfläche beschreibt. Anlass für die Einführung des Begriffs war ein Streit von Lotus… … Universal-Lexikon
look and feel — UK US noun [singular] business the qualities of a website such as how attractive it looks, how easy it is for customers to use, and how successful it is in giving customers a particular opinion about the company Thesaurus: internethyponym … Useful english dictionary
Look and Feel — Zu Aussehen und Handhabung vieler Desktops gehört, dass Fenster durch ein oben rechts enthaltenes X schließbar sind. Der Begriff Look and Feel (LAF; dt. Aussehen und Handhabung, „Anfühlen“, Anmutung) bezeichnet standardisierte Design Aspekte in… … Deutsch Wikipedia
Look And Feel — Der Begriff Look and Feel (LAF; dt. Aussehen und Handhabung, „Anfühlen“, Anmutung) bezeichnet meist durch Hersteller oder Konsortien standardisierte Design Aspekte einer Software, wie zum Beispiel Farben, Layout, Fontgröße, die Benutzung von… … Deutsch Wikipedia
Look and feel — Aspect et convivialité L aspect et la convivialité d une interface graphique (en anglais look and feel) est l ensemble des spécificités et caractéristiques d une interface qui lui donnent une identité et qui peut être perçu de différentes… … Wikipédia en Français
look and feel — /ˌlυk ən fi:l/ noun the appeal of the design, layout and ease of use of a website to potential customers and the way the site fits the image the company is trying to put across … Marketing dictionary in english
look and feel — noun The combination of the visual design and behaviour of a user interface … Wiktionary
look and feel — UK / US noun [singular] business the qualities of a website such as how attractive it looks, how easy it is for customers to use, and how successful it is in giving customers a particular opinion about the company … English dictionary
look and feel — ● ►en loc. m. ►SOC Les caractéristiques spécifiques de l interface d un produit … Dictionnaire d’informatique francophone
look-and-feel
Смотреть что такое «look-and-feel» в других словарях:
Look and feel — is a term used in descriptions of products and fields such as marketing, branding and trademarking, to signify the experience a person has using a product, and the main features of its appearance and interfaces.In software design, look and feel… … Wikipedia
Look and Feel — [dt. »Aussehen und Eindruck«], ein von der Firma Lotus geprägter Begriff, der das optische Erscheinungsbild sowie die Bedienungseigenschaften einer Benutzeroberfläche beschreibt. Anlass für die Einführung des Begriffs war ein Streit von Lotus… … Universal-Lexikon
look and feel — UK US noun [singular] business the qualities of a website such as how attractive it looks, how easy it is for customers to use, and how successful it is in giving customers a particular opinion about the company Thesaurus: internethyponym … Useful english dictionary
Look and Feel — Zu Aussehen und Handhabung vieler Desktops gehört, dass Fenster durch ein oben rechts enthaltenes X schließbar sind. Der Begriff Look and Feel (LAF; dt. Aussehen und Handhabung, „Anfühlen“, Anmutung) bezeichnet standardisierte Design Aspekte in… … Deutsch Wikipedia
Look And Feel — Der Begriff Look and Feel (LAF; dt. Aussehen und Handhabung, „Anfühlen“, Anmutung) bezeichnet meist durch Hersteller oder Konsortien standardisierte Design Aspekte einer Software, wie zum Beispiel Farben, Layout, Fontgröße, die Benutzung von… … Deutsch Wikipedia
Look and feel — Aspect et convivialité L aspect et la convivialité d une interface graphique (en anglais look and feel) est l ensemble des spécificités et caractéristiques d une interface qui lui donnent une identité et qui peut être perçu de différentes… … Wikipédia en Français
look and feel — /ˌlυk ən fi:l/ noun the appeal of the design, layout and ease of use of a website to potential customers and the way the site fits the image the company is trying to put across … Marketing dictionary in english
look and feel — noun The combination of the visual design and behaviour of a user interface … Wiktionary
look and feel — UK / US noun [singular] business the qualities of a website such as how attractive it looks, how easy it is for customers to use, and how successful it is in giving customers a particular opinion about the company … English dictionary
look and feel — ● ►en loc. m. ►SOC Les caractéristiques spécifiques de l interface d un produit … Dictionnaire d’informatique francophone
Создаём свой Look and Feel — Часть I
Добрый день, Хабражитель!
Уже достаточно много было рассказано о Swing и графике, также немного было упомянуто о различных незаурядных возможностях, предоставляемых сторонними библиотеками.
Сегодня же я представлю на Ваш суд «последний рубеж» погружения во все те возможности, которые предлагает нам Swing – создание своего Look and Feel класса, а также всего того, что потребуется по ходу дела.
Сразу скажу — если Вы хотите взяться за написание своего примера, а не просто «подсмотреть» пару интересных моментов — будьте готовы угробить потратить на это дело много времени, если Вы конечно собираетесь выпустить что-то более-менее живое и юзабельное в любых приложениях в качестве «обёртки», а также собираетесь в дальнейшем поддерживать созданный вами LaF.
Но даже если Вы не собираетесь делать свой LaF – советую всё же ознакомиться с содержанием. Уверен Вы найдёте много нового и интересного. И даже, возможно, поймёте в чём был корень той или иной интерфейсной проблемы, которая, вероятно, мучала Вас долгие месяцы и годы.
Tip: Если Вы не ещё не знакомы с графикой и Swing в Java более-менее тесно — советую сперва перечитать несколько статей на тему (к примеру оффициальный туториал, статью по Swing от Skipy или же мои предыдущие вводные статьи).
MyLookAndFeel.java
Итак, не теряя времени, начнём с основы — сам LookAndFeel класс. Пронаследуем наш MyLookAndFeel класс от BasicLookAndFeel, а не «пустого» LookAndFeel, так как в нём уже реализованы многие вещи, как то: константы для различных UI-классов, стандартные горячие клавиши компонентов, цветовые схемы и многое другое, без чего большинство UI-классов даже не сможет корректно инициализироваться (тем более что большую часть этих переменных нет необходимости переопределять).
Итак, используем готовый BasicLookAndFeel и переопределим несколько обязательных методов, описывающих наш будущий LaF:
public class MyLookAndFeel extends BasicLookAndFeel
<
public String getDescription ()
<
// Описание LaF
return «Cross-platform Java Look and Feel» ;
>
public String getName ()
<
// Имя LaF
return «MyLookAndFeel» ;
>
public String getID ()
<
// Уникальный идентификатор LaF
return getName ();
>
public boolean isNativeLookAndFeel ()
<
// Привязан ли данный LaF к текущей платформе (является ли его нативной имплементацией)
return false ;
>
public boolean isSupportedLookAndFeel ()
<
// Поддерживается ли данный LaF на текущей платформе
return true ;
>
>
Вот что мы получим на простом примере:
У данного LaF’а уже есть один заметный плюс — он полностью кросс-платформенный, т. е. в текущей реализации он будет выглядеть ужастно одинаково что на Windows, что на Mac OS, что на Linux системах.
Остаётся поработать над косметикой — именно этим мы и займёмся.
Стилизация компонентов
Итак, нам потребуется несколько вещей для видоизменения каждого компонента, начнём с самой очевидной — создание UI класса для выбранного компонента.
Для простоты возьмём кнопку — наиболее знакомый кому бы то ни было компонент.
По аналогии с BasicLookAndFeel для каждого J-компонента существует BasicUI-реализация, которая сильно упрощает и сводит к минимуму необходимые для стилизации компонентов операции. Для кнопки, не сложно догадаться, это BasicButtonUI – именно его мы и будем наследовать и переопределять.
Во всех UI-классах помимо специализированных методов (для каждого класса они свои, в зависимости от компонента, для которого данный UI) есть несколько стандартных методов, унаследованных от ComponentUI — для начала рассмотрим их:
Tip: В ComponentUI есть ещё несколько методов, но они нам сегодня не понадобятся и весьма вряд ли будут использованы Вами когда-либо, поэтому я сэкономлю время и позволю себе пропустить их описание.
Дабы не запутаться, ещё раз приведу список упомянутых классов/методов:
Ещё немного о LookAndFeel
Добавлю ещё немного описания построения LookAndFeel класса, чтобы в дальнейшем больше к нему не возвращаться.
Помимо описанной выше возможности указания UI классов для стандартных компонентов в UIDefaults при нициализации LookAndFeel’а есть также и множество других вещей, которыми заправляет LookAndFeel класс. Большинство из них Вам вряд ли потребуется реализовывать/переопределять, так как они уже есть в BasicLookAndFeel классе, но для порядка стоит знать, что же там творится.
для обёртки любых инстансов JDialog/JFrame в специальное оформление. О том же, как создать подобное оформление, дабы не распыляться, я напишу отдельным топиком в своё время.
Пожалуй теперь Вы достаточно узнали, чтобы преступить к первому UI-классу…
MyButtonUI.java
Теперь запускаем наш старый пример и готовимся увидеть нашу «обновлённую» кнопку:
Хм, что-то пошло не так… Неужели мы где-то накосячили в UI-классе?
Попробуем напрямую задать UI кнопке:
Пробуем:
Нет, с UI всё в порядке. Что же не так?
Данным метод присутствует в ComponentUI, но он… public static!? Спрашивается зачем в абстрактном ComponentUI статичный метод, который нельзя переопределить (собственно поэтому я и не увидел его сразу)?
Дело в том, что данный метод вызывается при создании UI в UIDefaults классе через Reflection, поэтому в нашем случае, так как мы этот метод не создали, при вызове был использован первый попавшийся под руку — его реализация в BasicButtonUI. А она, если посмотреть в исходный код, выглядит вот так:
public static ComponentUI createUI ( JComponent c )
<
// Создаём инстанс нашего UI
return new MyButtonUI ();
>
Запустим наш пример ещё раз, но уже без насильной установки UI JButton’у:
Ура, работает!
Tip: Если один и тот же Ваш UI класс может быть использован для всех компонентов определённого типа, то стоит делать его. В нашем случае с MyButtonUI это также возможно, поэтому немного изменим приведённый выше метод:
private static MyButtonUI instance = null ;
public static ComponentUI createUI ( JComponent c )
<
// Создаём инстанс нашего UI
if ( instance == null )
<
instance = new MyButtonUI ();
>
return instance ;
>
При таком использовании UI мы сможем сэкономить, как на востребованной памяти, так и на излишних инстансах MyButtonUI класса, создаваемых для каждого отдельного JButton’а. Впрочем если Вы хотите добавить возможность стилизации UI каждого компонента отдельно — данный вариант не подойдёт.
Ложка дёгтя
Понятное дело, на месте каждого «…» должен быть путь к конкретному UI-классу, определяющему внешний вид того или иного J-компонента.
Теперь Вы можете хотя бы приблизительно представить, сколько работы (и времени) потребует полное переопределение и реализация всех UI для стандартных Swing’овых компонентов.
Но не всё так плохо — если Вы исходно определились с концепцией/внешним видом Вашего LookAndFeel’а — дело пойдёт намного быстрее. Как я убедился на своём опыте — реализация большинства UI сводится к использованию нескольких стандартных методов, которые можно абстрагировать, вынести в отдельные утилит-классы и использовать повсеместно (к примеру отрисовка бордеров, фона, создание стандартных фигур и т.п.). Требуется лишь немного «магии» в некоторых сложных компонентах для доведения до ума их внешнего вида.
Итак, продолжим наше знакомство с различными UI классами, а точнее — рассмотрим предлагаемые BasicUI-классами методы и возможности, а также некоторые тонкости и сложные моменты, связанные с каждым отдельным UI и требующие той самой «магии».
Пожалуй для порядка пойдём прямо по списку, приведённому в коде выше…
Текстовые компоненты
BasicLabelUI – JLabel
Один из самых простых компонентов. В большинстве LookAndFeel’ов LabelUI либо вовсе не переопределён и используется BasicLabelUI, либо он лишь немного видоизменён. Например в WindowsLabelUI иначе работает отрисовка мнемоник-подчёркивания — оно видно только при зажатии Alt.
Всё что необходимо — отрисовка обычного или же HTML текста, а также мнемоник-подчёркивания — есть в BasicLabelUI.
Основная хитрость, кстати, в корректной отрисовке текста — для неё активно используются методы из SwingUtilities/SwingUtilities2. Сперва определяется расположение текста, а затем используется стандартный метод для его отрисовки :
Фактически — основную работу выполняет класс SwingUtilities2.
Если Вам интересно узнать больше — можете досконально изучить BasicLabelUI класс. Если Вы уже вполне хорошо ориентируетесь в графике никаких проблем возникнуть не должно.
Не будем задерживаться и пойдём дальше.
BasicToolTipUI – JToolTip
Не менее простой чем JLabel компонент. Фактически JToolTip (говоря абстрактно) это текст на фоне и с неким бордером.
Впрочем есть один небольшой нюанс — данный компонент при отображении располагается либо на JLayeredPane окна, в котором был показан тултип, либо на отдельном JWindow, если тултип выходит за рамки окна. Этот нюанс стоит учесть при отрисовке и избегать каких-либо специфичных форм тултипа и придерживаться «более-менее» прямоугольной.
Также если самому JToolTip’у задать и он будет находиться в рамках текущего окна, то он будет действительно прозрачен. В случае же отображения тултипа в отдельном JWindow этот трюк уже не сработает.
Пока что для выхода из этой ситуации есть несколько трюков — делать окно прозрачным недавно появившимися возможностями (AWTUtilities в версиях 1.6 u10 + или же методы Window в 1.7+) или же делать «скриншот» области, над которой показывается тултип и помещать его в качестве фона.
У первого варианта минус в том, что данная фича не везде работает корректно. У второго минус в статичности и скорости работы, т. е. если под окном тултипа была какая-либо анимация — её отсутствие будет заметно. Впрочем, в контексте тултипа это вряд ли играет большую роль.
Кнопки
BasicButtonUI – JButton
В примере MyButtonUI, приведённом выше, я не использовал методы определённые в BasicButtonUI, а просто полностью переопределил метод paint ( Graphics g, JComponent c ).
Делать так или же наследовать методы:
paintButtonPressed ( Graphics g, AbstractButton b )
paintText ( Graphics g, AbstractButton b, Rectangle textRect, String text )
paintIcon ( Graphics g, JComponent c, Rectangle iconRect )
paintFocus ( Graphics g, AbstractButton b, Rectangle viewRect, Rectangle textRect, Rectangle iconRect )
дело сугубо Ваше и зависит, скорее, от сложности отрисовываемой кнопки.
При желании можно и вовсе разделить отрисовку на части своими методами. К примеру вынести в отдельные методы отрисовку фона и текста с иконкой, но не более.
В любом случае — результат будет один и тот же, если нигде не ошибиться конечно же.
BasicToggleButtonUI – JToggleButton
Для JToggleButton нет ToggleButtonUI класса — только BasicToggleButtonUI, наследуемый от BasicButtonUI и фактически разницы между ними почти никакой нет. Только что в JToggleButton модель кнопки может принимать состояние selected=true, а в JButton нет, хотя сама модель в обоих случаях одна и та же.
Соответственно и визуальное различие заключается лишь в том, что JToggleButton может оставаться в pressed состоянии без удержания компонента мышью. Ни отрисовка, ни логика при этом фактически никак не меняется.
Поэтому мне кажется логичным реализовать UI как JButton так и JToggleButton одним и тем же классом или же просто пронаследовать для визуальной чистоты (MyToggleButtonUI extends MyButtonUI), ну и конечно же не забыть добавить статичный метод createUI ( JComponent c ) в MyToggleButtonUI.
BasicRadioButtonUI – JRadioButton
Аналогично JToggleButton – у данного компонента нет RadioButtonUI класса. BasicRadioButtonUI же унаследован от BasicToggleButtonUI и отличается лишь отрисовываемой иконкой и отсутствием стандартного фона.
BasicCheckBoxUI – JCheckBox
Данный UI полностью дублирует BasicRadioButtonUI, за исключением иконки.
BasicMenuBarUI — JMenuBar
Данный компонент представлет из себя «подставку» под JMenu компоненты и сам по себе кроме фона ничего не отрисовывает.
Впрочем при переопределении BasicMenuBarUI стоит также переопределить и бордер компонента, отсающийся «по наследию».
Ещё одна особенность — на Mac OS оформление и сам UI, а также все остальные UI меню и элементов меню не будут иметь смысла, если используется интеграция с системным меню-баром.
т. е. при использовании:
при запуске на Mac OS.
BasicMenuItemUI — JMenuItem
Честно признаюсь — этот компонент самый мерзкий из всех по реализации и количеству геморроя. Поэтому я более подробно обозначу все проблемные места.
Что самое интересное — половина из этих вещей не нужна в обычном JMenuItem. Но, забегая вперёд, скажу что данный класс реализует визуальное представление всех четырёх различных элементов меню — JMenu, JMenuItem, JCheckBoxMenuItem, JRadioButtonMenuItem.
И это только начало всей каши, дальше — лучше.
Все вычисления размеров и расположений отдельных элементов вынесено в класс MenuItemLayoutHelper, который вообще находится в другом пакете (sun.swing) и невозможно никак изменить. Также данный класс не входит в некоторые старые сборки JDK и OpenJDK.
В итоге, если Вас так или иначе не устраивает расположение элементов или их размеры — приходится прибегать к исхищрениям и уловкам и всячески обходить стандартные данные MenuItemLayoutHelper’а (к примеру мне нужно было сделать выравнивание всех элементов меню в линию с пробелом в иконку 16х16, даже если ни у одного элемента она не указана).
После пары дней убитых на бесполезную войну с ним я отказался от затеи и, использовав часть кода MenuItemLayoutHelper, написал свой собственный класс для подсчётов. Ещё, как вариант, можно вовсе отказаться от использования MenuItemLayoutHelper и реализовать все подсчёты заново.
BasicMenuUI – JMenu
Данный UI 1 в 1 повторяет реализацию BasicMenuItemUI, но Вам придётся выбрать меньшую из зол — либо наследовать свою реализацию BasicMenuItemUI и копировать логику работы JMenu из BasicMenuUI, либо наследовать BasicMenuUI и копировать визуальную реализацию из Вашего наследника BasicMenuItemUI.
Я выбрал второй вариант, так как всё же проще разбираться в своём коде, да и поддерживать любые изменения логики будет куда сложнее, нежели дублировать визуальное оформление.
BasicCheckBoxMenuItemUI – JCheckBoxMenuItem
BasicRadioButtonMenuItemUI – JRadioButtonMenuItem
Оба этих UI класса можно без зазрений совести расширять от Вашей реализации BasicMenuItemUI и переопределить лишь метод отрисовки выбора чекбокса/радиокнопки.
А можно вовсе реализовать эту отрисовку прямо в Вашем наследнике BasicMenuItemUI, а два данных UI класса просто расширить от него, добавив лишь статичный метод.
BasicPopupMenuSeparatorUI – JSeparator
Данный класс представляет лишь немного видоизменённый BasicSeparatorUI и используется исключительно в JPopupMenu для разделения элементов меню. Сам компонент JSeparator представляет из себя простую отрисованную полосу/линию/черту и используется для визуального разделения логических частей интерфейса.
BasicPopupMenuUI – JPopupMenu
Собственно, последний компонент из серии меню — JPopupMenu. Вся необходимая для работы данного компонента логика реализована в BasicPopupMenuUI, поэтому нам лишь остаётся изменить внешний вид на свой вкус.
Собственно здесь два момента — бордер меню, который определит отступ от края попап-меню до внутренних элементов и отрисовка фона меню.
Также, если Вам хочется экзотики, можно реализовать отрисовку выделения элементов попап-меню на его фоне, а не внутри каждого отдельного элемента меню. Это может быть полезно в случае если Вам необходим некоторый отступ от края до элементов, но выделение Вы хотите рисовать на всю ширину меню вплоть до самого края (такое выделение можно наблюдать, к примеру, в системных попап-меню на Mac OS).
Для этого правда придётся дополнительно в UI-классе запомнить текущее попап-меню и при отрисовке фона узнавать состояние элементов, а также корректно прослушивать смену выделения для перерисовки фона.
Продолжение следует.
Через некоторое время я опубликую II часть, в которой подробно опишу все оставшиеся BasicUI-классы, а также приведу несколько готовых примеров реализации UI компонентов.
Если Вы уже прочитали и освоили весь приведённый материал — можете попробовать приступить к реализации своего LaF’а или же просто попробовать переопределить несколько стандартных UI-классов.
Также Вы можете покопаться в исходных кодах WebLookAndFeel библиотеки, над которой я работаю в данный момент и на основе которой я смог достаточно основательно попрактиковаться в написании UI. Там Вы сможете найти полноценную реализацию всех стандартных UI, большинство которых я описал или ещё опишу в этой и следующей статьях, а также некоторые другие интерфейсные «плюшки».
Более подробно о ней, а также оставшихся UI классах читайте в продолжении примерно через неделю. И спасибо за внимание!
Если у Вас есть какие-либо вопросы по Java LookAndFeel/UI — не стесняйтейсь и отписывайтесь в комментариях! Постараюсь ответить на них по мере возможностей.