2009-06-29 48 views
8

Bạn đã bao giờ thử sử dụng Swing chỉ để kết thúc khóa học thay đổi vì nó không thể làm những gì bạn muốn?Java Swing GUI trên Mac OS X

Tôi khá mới để Swing, chỉ sử dụng nó cho các dự án trường học hơn 5 năm trước, nhưng có vẻ như Swing đã đi một chặng đường dài trong việc cung cấp một cái nhìn bản địa hơn và cảm thấy, rất nhiều để tôi xem xét sử dụng nó để phát triển GUI cho một ứng dụng trên Mac OS X. Trước khi tôi làm, tôi muốn xem liệu có ai đã gặp phải bất kỳ vấn đề nào trong showstopper ngăn cản họ sử dụng Swing hay không.

Chỉ cần ra khỏi đỉnh đầu của tôi, một số khả năng:

  • vấn đề phát triển các thành phần tùy chỉnh mà nhìn "đúng"
  • tương tác Xấu với các ứng dụng bản địa và các widget
  • vấn đề hiệu suất (unresponsiveness, sơn lại vấn đề)
  • Không có khả năng bắt chước hành vi gốc (như tương tác của Dock)
+1

@alanlcode: Tôi sẽ không gọi những showstoppers này nhưng khi bạn muốn hỗ trợ OS X 10.4,5 và 6 và 32 bit Mac không có Java 6 và cần các công cụ như tìm kiếm tốt * sắp xếp * JTable, đó là *rất nhiều công việc. Sau đó có vấn đề về bộ nhớ và vấn đề chậm chạp, GC có vẻ mất nhiều thời gian trên OS X hơn trên nền tảng khác, v.v. Tôi đã cân nhắc việc chuyển đổi nhưng có cùng mã nguồn cho Windows, OS X và Linux đủ để tiếp tục sử dụng Swing/Java :) Ngoài ra, tôi xem xét làm nhiều hơn Obj-C nhưng đi đến XCode hoặc bất cứ điều gì khác từ IntelliJ IDEA sẽ giống như trở lại thời kỳ đồ đá! – SyntaxT3rr0r

Trả lời

8

Swing sẽ không cung cấp cho bạn độ chính xác hoàn hảo với hệ điều hành máy chủ. Sun chỉ đơn giản là không thể dành những nguồn lực đáng kể cần thiết để làm như vậy. Ấn tượng của tôi là Swing đã trở nên tốt hơn nhiều, nhưng theo mặc định thì sẽ vẫn không được tìm ra.

Các yêu cầu tối thiểu để thậm chí hy vọng sẽ vượt qua như một ứng dụng Mac:

  • gói .jar của bạn trong một .app
  • thiết lập L & F để hệ thống mặc định
  • bộ apple.laf. tài sản useScreenMenuBar true
    • phải làm điều này trước khi bất kỳ mã UI

Tương tác của trình cắm không tồn tại trong Java chuẩn. Bạn sẽ phải sử dụng cầu Cocoa-Java của Apple, không còn được hỗ trợ nữa. Tôi không có ý tưởng làm thế nào JNI có thể kéo được trên OS X, đó là sự thay thế thực sự duy nhất.

Hiệu suất không phải là vấn đề. Kéo & Thả có lẽ là lông trên OS X vì nó ở mọi nơi khác.

Về cơ bản, nếu bạn đang nhắm mục tiêu rõ ràng OS X, tốt nhất bạn nên sử dụng Objective-C. Nó không thể xây dựng một ứng dụng trên OS X bằng cách sử dụng Java & Swing, nhưng nó rất nhiều công việc để làm cho nó trông "bản địa".

+0

Cảm ơn các ý tưởng. Động lực ban đầu của tôi để thử Java trên Mac là có thể đạt được một số kinh nghiệm thực tế bằng cách sử dụng Clojure, có vẻ như là một ngôn ngữ thú vị. Tôi đã quyết định sử dụng Objective-C cho GUI này, và có thể giải quyết Clojure trên một cái gì đó không đồ họa. – alanlcode

4

@ Kevin ++

Sử dụng Cocoa có lẽ là tốt hơn

  • Nếu bạn muốn nó trông giống hệt như các ứng dụng bản địa
  • Nếu bạn đang nhắm mục tiêu chỉ Mac

Nếu bạn có ý định để phân phối các ứng dụng của bạn cho Windows, Linux, v.v. Swing là một lựa chọn tốt. Nó tốt hơn nhưng cũng giống như trong bất kỳ bộ công cụ nào vẫn còn vấn đề. Bạn sẽ không bao giờ có được một cái nhìn thực sự bản địa và cảm thấy với nó, cùng đi cho bộ công cụ giao diện người dùng tương tự mà tuyên bố là "đa nền tảng".

Hướng dẫn của Apple về phát triển Java có thể được tìm thấy here.

6

Khi Kevin và John cho biết bạn nên thử Objective-C, Cocoa và XCode nếu bạn chỉ nhắm mục tiêu người dùng Mac. developer tools dành cho Mac có sẵn miễn phí.

Nếu bạn muốn (hoặc phải) sử dụng Java và Swing bạn có thể sử dụng một số thư viện để tạo ra một giao diện trông tốt trên Mac:

Đối triển khai ứng dụng của bạn, bạn nên đọc tài liệu JarBundler.

Tuy nhiên, trong trường hợp này, tương tác với đế và ứng dụng gốc rất hạn chế.

Một số liên kết tốt khác là: