Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> GUI, swing и Win XP 
:(
    Опции темы
Робби
Дата 13.4.2011, 23:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 17.11.2006

Репутация: нет
Всего: нет



Есть приложение, все компоненты Swing.
Клиент передумал и захотел всё в стиле Win XP/Vista/7...
Есть ли способ придать приложению соответствующий вид?
Или переписывать заново всё что касается GUI?
PM MAIL   Вверх
kemiisto
Дата 14.4.2011, 00:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: нет
Всего: 160



Цитата(Робби @  13.4.2011,  22:30 Найти цитируемый пост)
Клиент передумал и захотел всё в стиле Win XP/Vista/7...

Как это понимать? Вам нужен нативный L&F? Тогда, возможно, придётся переписать на SWT или QtJambi. А что конкретно не устраивает заказчика? Swing, конечно, не сказка, но уж не так и плох...

А может просто сделать заекрасиво? Нацепить какой-нить Substance?

Это сообщение отредактировал(а) kemiisto - 14.4.2011, 00:40


--------------------
PM MAIL WWW GTalk Jabber   Вверх
Робби
Дата 14.4.2011, 00:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 17.11.2006

Репутация: нет
Всего: нет



Заазчик вдруг захотел чтобы приложение выглядело родным для любой Windows.
Нашёл в сети WindowsLookAndFeel в пакете com.sun.java.swing.plaf.windows.*, но пока не понял как использовать
PM MAIL   Вверх
Skynin
Дата 14.4.2011, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 359
Регистрация: 1.7.2007
Где: Харьков

Репутация: нет
Всего: 10



Цитата

Нашёл в сети WindowsLookAndFeel в пакете com.sun.java.swing.plaf.windows.*, но пока не понял как использовать

из How to Set the Look and Feel
Код

    try {
        // Set System L&F
        UIManager.setLookAndFeel(
            UIManager.getSystemLookAndFeelClassName());
    } 
    catch ...
    }

Правда, если применяются диковинные темы в самой винде, то может не отработать все их красотени.

Из сторонних на стандартную тему Windows XP похож TinyLaF

Переписать на SWT может быть весьма затратно, даже когда разработчики одинаково хорошо владеют и Swing и SWT.
Это бы и объяснить заказчику, если SystemLookAndFeel ему не понравится.

PM MAIL WWW ICQ Skype GTalk YIM MSN   Вверх
COVD
Дата 14.4.2011, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 4
Всего: 43



Цитата

Заазчик вдруг захотел чтобы приложение выглядело родным для любой Windows.

Создатели Java провозглашали более скромную цель - чтобы приложение работало на всех ОС. И это почти удалось. А для "буйных" - набор L&F.
PM MAIL   Вверх
Temdegon
Дата 20.4.2011, 02:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 11.10.2008
Где: Minsk

Репутация: нет
Всего: 9



COVD, +100500!
Честно, не врубаюсь, что не так со свингом?
Хотя, возможно, мне сложно судить, т.к. меня всегда винда в стиле "Windows Classic", и по этому свинговый LaF вполне вписывается в общий интерфейс. 
Но все равно, не понимаю, что людям не нравится. Когда маководы возмущаются - это понять можно, там действительно с гуями все четко. Но пользователями винь что не нравится? Что есть "нативный" вид для винды? Понятно, что есть стандартные элементы интерфейса и все такое. Но где они? Если взять пару десятков популярных программ под Win, то из них половина будет выглядеть далеко не нативно, со своими "красивыми" окошками и UI-элементами, раскрашенными во все цвета радуги, не имеющими ни какого отношения к выбранному стилю оформления Windows. Photoshop (и остальные продукты Адоба) выглядит нативно? Skype? QiP? FireFox4? Новый FlashGet? Microsoft Office 2007 и 2010 нативные? в мою ХP он никак не вписываются. Еще у меня дрова мыши, упса и принтера стандартностью окон даже не пахнут, и бесят меня каждый день. Туда же все мультимедия плейеры. Список продолжить не могу - у меня не так много софта, а тонны игрушек сюда не приплести =) 
И все к этому давно привыкли и не возмущаются.

PM MAIL   Вверх
Skynin
Дата 20.4.2011, 08:56 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 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
PM MAIL WWW ICQ Skype GTalk YIM MSN   Вверх
COVD
Дата 20.4.2011, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 4
Всего: 43



Добавлю пример, хотя я не проверял, а читал на одном форуме.

Человек сделал на SWT таблицу. Таблица - это основной компонент бизнес-приложений, это наше все. И поместил туда много строк. И обнаружил, что чем больше строк, тем медленнее. Все умерли.

Таблица в каждый момент времени отображает, например, 20 строк. И Swing таблица рисует только эти 20 строк и скорость рисования не зависит от размера таблицы. В SWT же по гипотезе на каждую строку создаются нативные контролы, причем не динамически. Я с SWT не работал, мне было бы интересно, если кто-то прокомментировал бы это.

Я к тому, что сомневаюсь, что существует что-то более зрелое, испытанное временем и практикой, чем Swing.

Это сообщение отредактировал(а) COVD - 20.4.2011, 14:15
PM MAIL   Вверх
Amp
Дата 20.4.2011, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 886
Регистрация: 17.2.2009

Репутация: нет
Всего: 17



Temdegon, так-то оно так, но обычно свистелки дальше главного окна не распространяются - в диалоговых окнах уже нормальные нативные контролы. Соглашусь с Skynin по поводу отличий (хотя я бы употребил слово "косяки"), которые заметны опытному глазу и обычный их пользователь не заметит. 

Цитата(COVD @  20.4.2011,  14:12 Найти цитируемый пост)
В SWT же по гипотезе на каждую строку создаются нативные контролы, причем не динамически. Я с SWT не работал, мне было бы интересно, если кто-то прокомментировал бы это.

В WinAPI отсутствуют нативные контролы для реализации таблиц. Обычно библиотека сама берет на себе функции по отрисовке таких виджетов (например wxWidgets или Qt). Касательно "много строк" - это ССЗБ добавлять тысячи строк в контрол. Должна быть модель с данными, которая отображается на таблицу, должен быть механизм кэширования для отображаемых данных и их подгрузка при скроллинге.

Это сообщение отредактировал(а) Amp - 20.4.2011, 14:29
PM MAIL   Вверх
COVD
Дата 20.4.2011, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 4
Всего: 43



Цитата

В WinAPI отсутствуют нативные контролы для реализации таблиц. Обычно библиотека сама берет на себе функции по отрисовке таких виджетов (например wxWidgets или Qt). 


Я понял, что если имеем в колонке чек-бокс, и если в таблице 1000 строк, то будет создано 1000 чек-боксов. Не так?

Цитата

Касательно "много строк" - это ССЗБ добавлять тысячи строк в контрол.


Наверное, есть рещение. Но прокрутить 1000 и более строк - это обычная ситуация.
Кстати, что такое "ССЗБ" ? 

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


В Swing'е, в JTable,  есть модель. При скроллинге пересчитываются индексы, из модели по индексам извлекаются данные и перерисовываются. Там при скроллинге нечего кешировать и подгружать. 

  


PM MAIL   Вверх
Amp
Дата 20.4.2011, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 886
Регистрация: 17.2.2009

Репутация: нет
Всего: 17



Цитата(COVD @  20.4.2011,  16:26 Найти цитируемый пост)
Я понял, что если имеем в колонке чек-бокс, и если в таблице 1000 строк, то будет создано 1000 чек-боксов. Не так?

Нет. Делают так: предоставляют некий интерфейс, который позволяет пользователю отрисовать заданную ячейку таблицы. Далее делают для этого интерфейса несколько стандартных реализаций, например для отрисовки чекбокса или того же прогрессбара. Для отрисовки контрола не обязательно создавать элемент управление средствами API. Потому что API предоставляет интерфейс для получения битмапа с отрендеренным туда контролом в определенном состоянии (DrawThemeBackground для WinAPI). Это можно понять по некоторым особенностям, например отсутствие анимации в Vista/7 при переходе между различными состояниями контрола (т.к. применительно к встраиванию элементов в таблицу нет большого смысла заморачиваться этим). Контрол может действительно создаваться на активацию строки или ячейки (комбобокс или поле ввода на двойной клик), но это один, а не тысяча.

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

ССЗБ - "сами себе злые буратины". Т.е. пытаться скормить таблице содержимое здоровенной таблицы из БД и при этом не делать это через модель или через другой механизм созданный для этого.

Это сообщение отредактировал(а) Amp - 20.4.2011, 17:48
PM MAIL   Вверх
COVD
Дата 20.4.2011, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 4
Всего: 43



Понятно, спасибо.
Цитата

Да, если все данные уже есть в модели

Согласен.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0532 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.