![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Робби |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 17.11.2006 Репутация: нет Всего: нет |
Есть приложение, все компоненты Swing.
Клиент передумал и захотел всё в стиле Win XP/Vista/7... Есть ли способ придать приложению соответствующий вид? Или переписывать заново всё что касается GUI? |
|||
|
||||
| kemiisto |
|
|||
![]() Дикий Кот. =^.^= ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: нет Всего: 160 |
Как это понимать? Вам нужен нативный L&F? Тогда, возможно, придётся переписать на SWT или QtJambi. А что конкретно не устраивает заказчика? Swing, конечно, не сказка, но уж не так и плох... А может просто сделать заекрасиво? Нацепить какой-нить Substance? Это сообщение отредактировал(а) kemiisto - 14.4.2011, 00:40 -------------------- |
|||
|
||||
| Робби |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 17.11.2006 Репутация: нет Всего: нет |
Заазчик вдруг захотел чтобы приложение выглядело родным для любой Windows.
Нашёл в сети WindowsLookAndFeel в пакете com.sun.java.swing.plaf.windows.*, но пока не понял как использовать |
|||
|
||||
| Skynin |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 359 Регистрация: 1.7.2007 Где: Харьков Репутация: нет Всего: 10 |
из How to Set the Look and Feel
Правда, если применяются диковинные темы в самой винде, то может не отработать все их красотени. Из сторонних на стандартную тему Windows XP похож TinyLaF Переписать на SWT может быть весьма затратно, даже когда разработчики одинаково хорошо владеют и Swing и SWT. Это бы и объяснить заказчику, если SystemLookAndFeel ему не понравится. |
||||
|
|||||
| COVD |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 4 Всего: 43 |
Создатели Java провозглашали более скромную цель - чтобы приложение работало на всех ОС. И это почти удалось. А для "буйных" - набор L&F. |
|||
|
||||
| Temdegon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 429 Регистрация: 11.10.2008 Где: Minsk Репутация: нет Всего: 9 |
COVD, +100500!
Честно, не врубаюсь, что не так со свингом? Хотя, возможно, мне сложно судить, т.к. меня всегда винда в стиле "Windows Classic", и по этому свинговый LaF вполне вписывается в общий интерфейс. Но все равно, не понимаю, что людям не нравится. Когда маководы возмущаются - это понять можно, там действительно с гуями все четко. Но пользователями винь что не нравится? Что есть "нативный" вид для винды? Понятно, что есть стандартные элементы интерфейса и все такое. Но где они? Если взять пару десятков популярных программ под Win, то из них половина будет выглядеть далеко не нативно, со своими "красивыми" окошками и UI-элементами, раскрашенными во все цвета радуги, не имеющими ни какого отношения к выбранному стилю оформления Windows. Photoshop (и остальные продукты Адоба) выглядит нативно? Skype? QiP? FireFox4? Новый FlashGet? Microsoft Office 2007 и 2010 нативные? в мою ХP он никак не вписываются. Еще у меня дрова мыши, упса и принтера стандартностью окон даже не пахнут, и бесят меня каждый день. Туда же все мультимедия плейеры. Список продолжить не могу - у меня не так много софта, а тонны игрушек сюда не приплести =) И все к этому давно привыкли и не возмущаются. |
|||
|
||||
| Skynin |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 359 Регистрация: 1.7.2007 Где: Харьков Репутация: нет Всего: 10 |
Temdegon - присоединяюсь к недоумению.
Та же 1С 8ой версии - выглядит в винде нативно? Особенно ее "управляемый интерфейс"? А 7ая в новых версиях винды - где ее родной для остальной винды вид? Или утилиты от Wise (Disk cleaner, Registry cleaner), O&O Defrag - где у них нативный вид? (мне вообще непонятно нафига системным то утилитам - красотень с переливами??) Wise вообще похож на LaF Substance со всмеми включенными наворотами. Браузер Opera после инсталляции имеет 2 темы - "Стандартная" и "Windows Native Skin". И включена - "Стандартная". У Swing'а есть отличия, заметные опытному глазу, знающему куда и на что смотреть. И при большом количестве и сложном взаимодействии контролов он иногда сонно может отрабатывать (хотя чаще причина в том что программист оставил обработку в потоке EDT, а не вынес в отдельный. Ну не разобрался он, не освоил SwingWorker или свой аналог не написал). Но вот аргумент вид не нативный... Говорят сглаживание шрифтов под линухами какое-то не то... Линух на десктопе в последний раз я видел году в 2001ом, не спец потому. Кстати, по поводу SWT. За последние пару лет Swing в большинстве случаев уже не уступает. Его проигрыш в скорости верен концу 90ых и первым 5 годам этого века. Мало того, встречал замеры работы разных контролов, и оказалось что скорость работы Swingовской jTable ощутимо выше аналогичного в SWT. У меня ощущение что к интерфейсу Swing - пристебываются совсем по другим причинам "Жаба тормозная, а вот если бы на C#" - просто потому что не видели как работает приложение с использованием WPF И "Жаба умерла", хотя жить ей и жить. В любом случае - не из-за Swing'а и его действительных недостатков и специфики P.S. Недавно сисадмину помогал, пройтись по компам перенастроить прокси. Так вот почтарь The Bat - нативного вида? Пользователи почему-то не жалуются. А gmail и майл.ру внутри браузера - нативные и шустрые? И встречал опытных пользователей, что пользуются Файрфоксом - так у них он в такие скины одет что ах. Ой не так что-то с аргументами о важности нативного вида GUI... Это сообщение отредактировал(а) Skynin - 20.4.2011, 09:09 |
|||
|
||||
| COVD |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 4 Всего: 43 |
Добавлю пример, хотя я не проверял, а читал на одном форуме.
Человек сделал на SWT таблицу. Таблица - это основной компонент бизнес-приложений, это наше все. И поместил туда много строк. И обнаружил, что чем больше строк, тем медленнее. Все умерли. Таблица в каждый момент времени отображает, например, 20 строк. И Swing таблица рисует только эти 20 строк и скорость рисования не зависит от размера таблицы. В SWT же по гипотезе на каждую строку создаются нативные контролы, причем не динамически. Я с SWT не работал, мне было бы интересно, если кто-то прокомментировал бы это. Я к тому, что сомневаюсь, что существует что-то более зрелое, испытанное временем и практикой, чем Swing. Это сообщение отредактировал(а) COVD - 20.4.2011, 14:15 |
|||
|
||||
| Amp |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 886 Регистрация: 17.2.2009 Репутация: нет Всего: 17 |
Temdegon, так-то оно так, но обычно свистелки дальше главного окна не распространяются - в диалоговых окнах уже нормальные нативные контролы. Соглашусь с Skynin по поводу отличий (хотя я бы употребил слово "косяки"), которые заметны опытному глазу и обычный их пользователь не заметит.
В WinAPI отсутствуют нативные контролы для реализации таблиц. Обычно библиотека сама берет на себе функции по отрисовке таких виджетов (например wxWidgets или Qt). Касательно "много строк" - это ССЗБ добавлять тысячи строк в контрол. Должна быть модель с данными, которая отображается на таблицу, должен быть механизм кэширования для отображаемых данных и их подгрузка при скроллинге. Это сообщение отредактировал(а) Amp - 20.4.2011, 14:29 |
|||
|
||||
| COVD |
|
||||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 4 Всего: 43 |
Я понял, что если имеем в колонке чек-бокс, и если в таблице 1000 строк, то будет создано 1000 чек-боксов. Не так?
Наверное, есть рещение. Но прокрутить 1000 и более строк - это обычная ситуация. Кстати, что такое "ССЗБ" ?
В Swing'е, в JTable, есть модель. При скроллинге пересчитываются индексы, из модели по индексам извлекаются данные и перерисовываются. Там при скроллинге нечего кешировать и подгружать. |
||||||
|
|||||||
| Amp |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 886 Регистрация: 17.2.2009 Репутация: нет Всего: 17 |
Нет. Делают так: предоставляют некий интерфейс, который позволяет пользователю отрисовать заданную ячейку таблицы. Далее делают для этого интерфейса несколько стандартных реализаций, например для отрисовки чекбокса или того же прогрессбара. Для отрисовки контрола не обязательно создавать элемент управление средствами API. Потому что API предоставляет интерфейс для получения битмапа с отрендеренным туда контролом в определенном состоянии (DrawThemeBackground для WinAPI). Это можно понять по некоторым особенностям, например отсутствие анимации в Vista/7 при переходе между различными состояниями контрола (т.к. применительно к встраиванию элементов в таблицу нет большого смысла заморачиваться этим). Контрол может действительно создаваться на активацию строки или ячейки (комбобокс или поле ввода на двойной клик), но это один, а не тысяча. Да, если все данные уже есть в модели, то кэш как таковой там не нужен. Просто данные могут подгружаться с сервера (что затратно по времени), и модель в заданный момент времени может не обладать всем объемом данных. Тут их уже неплохо было бы кэшировать, чтобы минимизировать задержки в работе с таблицей. ССЗБ - "сами себе злые буратины". Т.е. пытаться скормить таблице содержимое здоровенной таблицы из БД и при этом не делать это через модель или через другой механизм созданный для этого. Это сообщение отредактировал(а) Amp - 20.4.2011, 17:48 |
|||
|
||||
| COVD |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 4 Всего: 43 |
Понятно, спасибо.
Согласен. |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |