2012-06-20 36 views
5

Câu hỏi này có vẻ không phải là rất kỹ thuật nhưng, vì tò mò, tôi muốn biết rằng:Làm thế nào để một mã Swing lần lượt vào một ứng dụng đồ họa thực

Làm thế nào để trần/code Swing liệu bằng văn bản của tôi, lần lượt vào một ứng dụng đồ họa tuyệt vời?

Ví dụ:

  • Giống như khi chúng ta thực hiện một JFrame có thể nhìn thấy, hoặc khi chúng ta đặt một JButton trên đó. Ai làm cho nó xảy ra? Hệ điều hành hoặc Java hoặc JVM.

  • Ai làm cho màu sắc xuất hiện?

  • Quá trình diễn ra đằng sau hậu trường là gì?

Tôi hỏi đây có lẽ là lần đầu tiên trong đời tôi tạo ra ứng dụng đồ họa RealWorld và những câu hỏi này xuất hiện trong đầu tôi!

Cảm ơn trước!

+0

JVM qua hệ điều hành :) – GETah

Trả lời

5

Trong Swing, tất cả các thành phần GUI được viết hoàn toàn bằng Java và được kết xuất bằng Java. Ví dụ, JButtons sẽ được rút ra bởi Java và không phải bởi bất kỳ nội dung hệ điều hành nội bộ nào. Do đó, các thành phần Swing được gọi là "các thành phần có trọng lượng nhẹ" vì chúng được quản lý và kết xuất bởi Java thay vì bởi hệ điều hành (hoặc bất kỳ bộ công cụ tiện ích riêng nào).

Lưu ý rằng Java cũng có một bộ công cụ gọi là AWT. Swing dựa trên các phương thức lồng nhau và được kế thừa từ AWT, ngoại trừ việc nó tạo ra các widget gốc bằng cách sử dụng hệ điều hành.

Vì vậy, tại một số điểm, Swing sẽ phải tạo một cửa sổ trên màn hình và vẽ trên đó. Ma thuật thực sự tạo ra cửa sổ được xử lý bởi AWT. Lưu ý rằng JFrame kéo dài từ java.awt.Frame có nghĩa là mặc dù JFrame có thể được hiển thị chủ yếu bởi Java, nó được hỗ trợ bởi cửa sổ hệ điều hành gốc nặng.

+1

Điều này chỉ đúng một phần. Cuối cùng, API Java 2D dựa trên các chức năng cụ thể của OS để vẽ trên màn hình và có đồ họa tăng tốc phần cứng (DirectX, OpenGL, v.v.) –

+1

Điều gì thậm chí còn tuyệt vời hơn nữa là bạn có thể thực hiện cùng một chương trình Java đó , không biên dịch lại và chạy nó trên một hệ điều hành khác và nó sẽ hoạt động. – Bill

+0

@Bill: nếu bạn muốn ứng dụng xoay của mình trông đẹp mắt trên tất cả nền tảng và LaF, bạn đang gặp phải một số nhức đầu thực :) –

0

Tôi không biết tất cả chi tiết, nhưng đồ họa thực tế được hiển thị/hiển thị thông qua các gói swing/awt thông qua chính JVM.

1

Tóm lại, có bộ công cụ AWT, là lớp thực hiện tất cả quản lý cửa sổ và bản vẽ. Nó đang gọi mã nền tảng riêng của nền tảng bên trong JVM. Nó cũng chịu trách nhiệm về bản vẽ java2d. Nó có thể sử dụng đường ống dẫn trực tiếp hoặc opengl tăng tốc.

Swing được phát triển trên đầu trang của nó. Swing thực sự thu hút mọi nút và mọi đối tượng bằng mã java đơn giản. Bản vẽ được xử lý theo giao diện hiện tại và cảm thấy quyết định cách vẽ các thành phần. Vì vậy, bạn có thể ghi đè lên phương pháp vẽ của họ, và thêm một số điều bổ sung mà không có bất kỳ vấn đề.

Kim loại và Nimus LaF là 100% java2d được vẽ, vì vậy bên trong chúng, bạn sẽ tìm thấy những thứ như drawRectangle và drawLine để vẽ các thành phần. Giao diện gốc và cảm nhận, như cửa sổ, gtk, truy cập chủ đề hệ điều hành hiện tại để vẽ thứ gì đó trông tương tự như các tiện ích gốc. Đó là lý do tại sao họ không phải lúc nào cũng giống như các ứng dụng bản địa.

Ngoài ra còn có các bộ công cụ gui khác cho java, như SWT, được sử dụng, ví dụ, trong Eclipse. Những gì nó đang làm, là nhận được các cửa sổ từ AWT, và sau đó đặt 100% vật dụng bản địa trên đó. Nó được tích hợp tốt hơn với hệ điều hành, trông tốt hơn, hoạt động nhanh hơn, sử dụng ít bộ nhớ hơn.Nhưng với nó, bạn phải phân phối ứng dụng của mình với các thư viện gốc riêng của os và nó ít tùy biến hơn so với Swing.

+0

+1 Kim loại bị hỏng Java2D rút ra, Nimbus bị hỏng L & F :-) – mKorbel

Các vấn đề liên quan