2009-06-29 22 views
8

Haben Sie schon einmal versucht, Swing nur zu benutzen, um Kurse zu ändern, weil es einfach nicht das machen konnte, was Sie wollten?Java Swing GUIs unter Mac OS X

Ich bin ziemlich neu in Swing, habe es nur für Schulprojekte vor über 5 Jahren verwendet, aber es scheint Swing hat einen langen Weg in einem nativen Aussehen und Gefühl, so sehr, dass ich überlege Ich benutze es, um die GUI für eine App unter Mac OS X zu entwickeln. Vorher wollte ich jedoch sehen, ob irgendjemand irgendwelche Showstopper-Probleme hatte, die die Verwendung von Swing verhinderten.

Direkt an der Spitze von meinem Kopf, einige Möglichkeiten:

  • Probleme benutzerdefinierte Komponenten zu entwickeln, die „richtigen“
  • Bad Interaktionen mit nativen Anwendungen und Widgets
  • Leistungsprobleme (Teilnahmslosigkeit sah, neu streichen Probleme)
  • Unfähigkeit nativen Verhalten zu imitieren (wie Dock-Interaktion)
+1

@alanlcode: Ich würde diese Showstopper nicht nennen, aber wenn Sie OS X 10.4,5 und 6 und 32 Bit Macs unterstützen möchten, die kein Java 6 haben und etwas gut aussehendes * sortierbares * JTable brauchen, ist es ein *viel Arbeit. Dann gibt es das Problem mit dem Speicherschwund und die Probleme mit der Langsamkeit, GC scheint auf OS X länger zu dauern als auf anderen Plattformen usw. Ich habe überlegt, zu wechseln, aber den gleichen Quellcode für Windows, OS X und Linux zu verwenden ist ausreichend Swing/Java :) Außerdem habe ich darüber nachgedacht mehr Obj-C zu machen, aber nach XCode oder irgendetwas anderes von IntelliJ IDEA zu gehen, wäre wie in die Steinzeit zurückzukehren! – SyntaxT3rr0r

Antwort

8

Swing Sie perfekt Treue geben, mit dem Hosting-OS nicht gehen. Sun kann einfach nicht die erheblichen Ressourcen dafür aufbringen. Mein Eindruck ist, dass Swing viel besser geworden ist, aber standardmäßig immer noch fehl am Platz ist.

Die erforderliche Mindest sogar als Mac App passieren zu hoffen:

  • Satz apple.laf

    • Paket Ihre .jar in einer .app
    • setzen die L & F auf Systemstandard. useScreenMenuBar Eigenschaft auf true
      • müssen dies tun, bevor eine UI-Code

    Dock-Interaktion ist in Standard-Java nicht vorhanden. Sie müssen die Cocoa-Java-Bridge von Apple verwenden, die nicht mehr unterstützt wird. Ich habe keine Ahnung, wie handhabbar JNI auf OS X ist, was die einzige echte Alternative ist.

    Leistung sollte kein Problem sein. Drag & Drop ist wahrscheinlich so haarig auf OS X wie überall.

    Wenn Sie explizit auf OS X abzielen, sollten Sie Objective-C verwenden. Es ist alles andere als unmöglich, eine App auf OS X mit Java Switches zu erstellen, aber es ist eine Menge Arbeit, um es "nativ" aussehen zu lassen.

  • +0

    Danke für die Ideen. Mein ursprünglicher Anstoß, Java auf dem Mac auszuprobieren, war, mit Clojure, das wie eine interessante Sprache erscheint, echte Erfahrungen zu sammeln. Ich habe mich entschieden, Objective-C für diese GUI zu verwenden und Clojure möglicherweise auf etwas nicht-grafisches zu manipulieren. – alanlcode

    4

    @ Kevin ++

    Kakao zu verwenden ist wahrscheinlich besser

    • Wenn Sie es wollen, genau schauen, wie native Anwendungen
    • Wenn Sie nur den Mac

    Wenn Sie zielen beabsichtigen um Ihre Anwendungen für Windows, Linux usw. zu verteilen. Swing ist eine gute Wahl. Es ist besser, aber wie in jedem Toolkit gibt es immer noch Probleme. Sie werden nie ein echtes natives Aussehen und Gefühl erhalten, dasselbe gilt für ähnliche UI-Toolkits, die sich als "plattformübergreifend" bezeichnen.

    Die Apple-Richtlinien für die Java-Entwicklung können here gefunden werden.

    6

    Wie Kevin und John sagten, sollten Sie Objective-C, Cocoa und XCode ausprobieren, wenn Sie nur auf Mac-Benutzer abzielen. Die developer tools für Mac ist frei verfügbar.

    Wenn Sie wollen (oder müssen), verwenden Java und Swing einige Bibliotheken verwenden, um eine GUI zu erstellen, die auch auf Macs aussieht:

    Für Bereitstellung Ihrer Anwendung sollten Sie die JarBundler Dokumente lesen.

    In diesem Fall ist die Interaktion mit dock- und nativen Anwendungen jedoch sehr begrenzt.

    Einige andere gute Verbindungen sind: