2009-06-29 2 views
8

Вы когда-нибудь пытались использовать Swing только для того, чтобы в итоге менялись курсы, потому что он просто не мог делать то, что вы хотели?Java Swing GUI на Mac OS X

Я довольно новичок в Swing, использовав его только для школьных проектов более 5 лет назад, но кажется, что Swing прошел долгий путь в обеспечении более естественного внешнего вида и ощущения, настолько, что я рассматриваю используя его для разработки графического интерфейса для приложения на Mac OS X. Тем не менее, прежде чем я это сделал, мне захотелось выяснить, столкнулся ли кто-нибудь с проблемами showstopper, которые помешали им использовать Swing.

Только от верхней части моей головы, некоторые возможности:

  • Проблемы разработки пользовательских компонентов, которые выглядели «право»
  • Плохие взаимодействия с родными приложениями и виджетами
  • вопросы производительности (невосприимчивость, перекрашивать проблемы)
  • Невозможность имитировать собственные модели поведения (например, взаимодействие Dock)
+1

@alanlcode: Я бы не назвал эти showstoppers, но если вы хотите поддерживать OS X 10.4,5 и 6 и 32-битные Mac, у которых нет Java 6, и нужны такие вещи, как хорошо выглядящие * сортируемые * JTable, это *много работы. Тогда есть проблема с контентом памяти и проблемы с медлительностью, GC, которая, кажется, занимает больше времени на OS X, чем на другой платформе и т. Д. Я рассматривал возможность переключения, но с тем же исходным кодом для Windows, OS X и Linux достаточно, чтобы продолжать использовать Swing/Java :) Кроме того, я подумал о том, чтобы сделать больше Obj-C, но перейдя на XCode или что-нибудь еще, от IntelliJ IDEA будет похоже на возвращение в каменный век! – SyntaxT3rr0r

ответ

8

свинг не собирается дать вам идеальную точность воспроизведения с хостинга ОС. Солнце просто не может выделить значительные ресурсы, необходимые для этого. У меня сложилось впечатление, что Swing стал намного лучше, но по-прежнему выглядит неуместным по умолчанию.

Минимальная требуемая даже надеяться пройти как приложение Mac:

  • пакет ваш .jar в .app
  • Установите L & F в системе по умолчанию
  • набор apple.laf. useScreenMenuBar свойство истинного
    • должны сделать это до любого кода пользовательского интерфейса

Док-взаимодействие в стандартной Java не существует. Вам придется использовать модем Apple Cocoa-Java, который больше не поддерживается. Я понятия не имею, насколько приемлемым JNI является OS X, что является единственной реальной альтернативой.

Производительность не должна быть проблемой. Перетащите & Капля, вероятно, такая же волосатая на OS X, как и везде.

В принципе, если вы явно нацеливаете OS X, вам лучше использовать Objective-C. Его далеко не невозможно построить приложение на OS X с помощью Java & Swing, но его много работы, чтобы он выглядел «родным».

+0

Спасибо за идеи. Мой первоначальный импульс для попытки Java на Mac состоял в том, чтобы получить реальный опыт, используя Clojure, который кажется интересным языком. Я решил использовать Objective-C для этого графического интерфейса и, возможно, решить Clojure на что-то неграфическое. – alanlcode

4

@ Кевин ++

Использование какао, вероятно, лучше

  • Если вы хотите, чтобы она выглядела так же, как родные приложения
  • Если вы ориентируетесь только на Mac

Если вы собираетесь для распространения ваших приложений для Windows, Linux и т. д. Swing - достойный выбор. Это лучше, но, как и в любом наборе инструментов, все еще есть проблемы. Вы никогда не получите по-настоящему родной вид и не почувствуете с ним, то же самое относится к аналогичным инструментариям пользовательского интерфейса, которые утверждают, что они «кросс-платформенные».

Руководства Apple для разработки Java можно найти here.

6

Как Кевин и Джон сказали, что вы должны попробовать Objective-C, Cocoa и XCode, если вы ориентируетесь только на пользователей Mac. developer tools для Mac свободно доступен.

Если вы хотите (или должны) использовать Java и свинг вы можете использовать некоторые библиотеки для создания графического интерфейса пользователя, который выглядит хорошо на Маках:

Для развертывая приложение, вы должны прочитать документы JarBundler.

Однако в этом случае взаимодействие с док-станцией и родными приложениями очень ограничено.

Некоторые другие хорошие ссылки:

Смежные вопросы