Индивидуальный внешний вид Swing и пользовательские компоненты?

Я пишу игру, используя Swing, и хочу добиться характерного стиля «стимпанк», вдохновленного графическим интерфейсом. Для этого потребуются анимированные компоненты, массивные металлические рамки и т. д.

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

Так ли это, или мне следует подумать о разработке совершенно нового подключаемого внешнего вида?

Каковы плюсы/минусы каждого?


person mikera    schedule 01.07.2010    source источник
comment
См. мой ответ на почти идентичный вопрос за несколько недель. тому назад.   -  person Kirill    schedule 02.07.2010


Ответы (2)


Лично я думаю, что вы должны пойти на совершенно новый внешний вид... вы также можете создать его на основе Synth L&F вместо того, чтобы писать все самостоятельно.

Nimbus — это пример L&F, написанного поверх синт.

person Powerlord    schedule 01.07.2010
comment
Спасибо! Это оказалось отличным советом: мне удалось заставить настроенную версию Synth работать и отображать некоторые новые блестящие компоненты за пару часов. - person mikera; 02.07.2010
comment
+1 за Synth LAF, это отличный LAF (и было бы еще лучше, если бы базовые объекты пользовательского интерфейса Synth были общедоступными и не дружественными... кхм). @mikera Просто, если учесть много изменений и интенсивно используемое приложение, то лучше не использовать конфигурацию xml и отрисовку по изображениям, а реализовать в коде кастомные рисовальщики и конфигурацию (см. Реализация Nimbus в java7). Ест намного меньше памяти, и более управляем. - person Taisin; 02.07.2010

Создание нового L&F — более долгий путь, но сохраняет ваш код простым. (Если вам нужно всего несколько изменений, это не стоит затраченных усилий.) Например, анимацию можно закодировать в части L&F, поэтому вам не нужно беспокоиться об этом в своих компонентах. Я бы предложил отредактировать L&F, который близок к тому, что вам нужно.

person Ishtar    schedule 01.07.2010