Thứ Năm, 17 tháng 11, 2005

SWT - Phần 1

Lần lượt sẽ post lên blog này một loạt bài viết đã viết từ trước đó về SWT.

5 nhận xét:

  1. 1.Dấu hỏi cho SWT .

    Trong java chúng ta đã biết có hai gói tạo giao diện ứng dụng là AWT và Swing . Tuy nhiên thời gian gần đây cộng đồng lập trình viên Java lại đón nhận thêm một nền tảng giao diện nữa là SWT được phá triển bởi IBM . Tại sao IBM lại phát triển nó ? Tại sao lại không sử dụng các nền tảng giao diện có sẵn trong Java ? Và còn rất nhiều câu hỏi khác nữa dành cho SWT .Tôi có thể chắc rằng khi đọc bài viết này nhiều người vẫn chưa biết đến SWT là gì hay mới chỉ nghe nói về nó . Vậy chúng ta hãy cùng khám phá câu trả lời cho những dấu hỏi của SWT .

    Trong những phiên bản đầu còn non nớt của java , Sun đã tạo ra AWT ( Abstract Windowing Toolkit ), một GUI Framework cho mọi nền tảng . AWT cho phép bạn tạo có giao diện với khả năng chạy trên những hệ điều hành khác nhau . Tuy nhiên , AWT đã vấp phải một vấn đề lớn đó là đánh mất đi những đặc trưng của nền tảng mà ứng dụng đang chạy . Ví dụ nền tảng A có thành phần giao diện ( Menu , Button , Label, …) từ 1-40 trong khi nền tảng B lại chỉ có những thành phần giao diện từ 15 – 50 vậy thì AWT sẽ chỉ cung cấp các thành phần chung của 2 nền tảng này là các thành phần giao diện từ 15-40 . Bạn có thể kiểm chứng điều này bằng cách thử đặt Tooltip cho các thành phần AWT mà xem , chắc chắn sẽ không được . Do đó AWT đã đánh mất đi sự “ đa dạng “ trong việc tạo giao diện ứng dụng trong Java .

    Swing ra đời như một giải pháp khắc phục những yếu điểm đó , Swing là một GUI Framework của riêng Java , không phụ thuộc vào bất cứ nền tảng nào . Swing không sử dụng các thành phần sẵn có của hệ điều hành , nó sử dụng các đối tượng được Sun xây dựng sẵn . Tuy đã khắc phục được yếu điểm của AWT nhưng lại nảy sinh một vấn đề hoàn toàn khác . Các trình ứng dụng có giao diện bằng Swing sẽ trông không được phù hợp , tự nhiên trong nền tảng mà nó đang chạy . Dù ở những phiên bản cuối cùng của JVM , các ứng dụng Swing vẫn tồn tại sự khác biệt với nền tảng giao diện của các hệ điều hành . Mặc dù bạn có thể cài các bộ cảm quan (LookAndFeel ) những chúng vẫn chưa được hoàn mỹ như mong muốn . Ví dụ bạn sẽ không thể thực hiện các thao tác chuột phải đầy đủ trong hộp chọn file – JFileChooser . Một điểm yếu khác nữa là Swing chiếm dụng quá nhiều tài nguyên và chậm . Do đó bạn sẽ không thể chạy các ứng dụng giao diện Swing trên các thiết bị PDA hay Mobile Phones , một trong những thị trường phát triển cực mạnh vào thời gian gần đây .

    IBM đã có được giải pháp thích hợp khắc phục được những yếu điểm trên của cả AWT và Swing . Người khổng lồ này đã tạo ra một GUI Framework mới được gọi là Standard Widget Toolkit – SWT . SWT có thể truy cập vào các thành phần giao diện tự nhiên của từng nền tảng thông qua JNI . Nếu như một nền tảng nào đó không có thành phần đó , SWT sẽ cung cấp chúng trong thư viện của nó . Bạn hoàn toàn có thể chạy một ứng dụng Java có giao diện chẳng khác gì giao diện được tạo bằng C# hay VB trong Windows .Thậm chí , bạn có thể tạo một browser thông qua IE chỉ với một vài dòng lệnh đơn giản . SWT chạy cực nhanh với lượng tài nguyên chiếm dụng trong bộ nhớ chỉ bằng một nửa so với Swing .

    Trả lờiXóa
  2. 2.Nhược điểm của SWT

    SWT có nhược điểm không ? Câu trả lời là có. Dưới đây xin được tóm lược 3 nhược điểm căn bản của SWT.
    - API không rõ ràng, tài liệu rất ít , không hệ thống và đầy đủ.
    - Các widget của SWT không linh động. Khi khởi tạo một widget , chúng ta phải khai báo widget này thuộc về container nào. Khác với Swing, chúng ta có thể tạo ra một đối tượng bất kì rồi gắn hay gỡ bỏ ở bất cứ đâu. Hơn nữa, khả năng customization của các widget trong SWT rất kém so với Swing. Bản không thể xây dựng nên những widget linh động hơn trừ việc xây dựng một widget mới Ccombo với Combo là một ví dụ.
    - Widget vẫn còn tương đối nghèo nàn và yếu so với swing. Một số lỗi vẫn chưa được debug hết và sự ổn định của ứng dụng SWT không cao bằng swing. Ví dụ, bạn không thể đặt background cho Button được , đây là một lỗi căn bản của SWT. Hay việc truy cập giữa Thread tới Display không được tự nhiên, bắt buộc phải cài đặt qua các thành phần trung gian. Hay nếu ứng dụng của bạn sử dụng browser mà browser trên máy khách hàng bị lỗi , khi đó ứng dụng của bạn cũng bị lỗi theo.

    Trả lờiXóa
  3. 3.SWT gồm những gì ?
    Trong khuôn khổ một bài viết, chúng ta không thể khám phá hết cấu trúc cũng như các thành phần của SWT. Do đó tôi chỉ xin được mô tả một cách rất sơ lược về nó.

    Display, Shell và Widget là những thành phần cơ bản của SWT. Display là luồng (Thread) chịu trách nhiệm quản lý những kích hoạt và điều khiển tương tác giữa các luồng giao diện với các luồng khác. Shell là một cửa sổ úng dụng được quản lí bởi bộ quản lí cửa sổ của hệ điều hành. Mọi trình SWT đòi hỏi ít nhất một Display và một hoặc nhiều đối tượng Shell.

    Nếu như một trình ứng dụng sử dụng nhiều luồng, mỗi luồng đó sẽ sử dụng một đối tượng Display. Chúng ta có thể lấy ra được đối tượng đang được kích hoạt của lớp Display bằng cách sử dụng một phương thức tĩnh Display.getCurrent().

    Shell là một cửa sổ trong một hệ điều hành cụ thể. Một shell có thể ở trạng thái lớn nhất, nhỏ nhất hoặc bình thường. Loại đầu tiên ở mức cao chúng được tạo như là các cửa sổ con, sổ chính của Display. Loại thứ hai la các Dialog phụ thuộc vào các Shell khác ( có thể là các shell loại 1 hoặc loại 2), ví dụ như JFileChooser hay JColorChooser trong Swing.
    Kiểu của Shell phụ thuộc vào kiểu bit, thực chất là một số tự nhiên để định dạng loại widget. Giá trị mặc định của Shell là DialogShell (khi không có thông số nào được truyền vào ). Nếu như một đối tượng Display được truyền vào thì Shell này sẽ thuộc về kiểu 1.
    Một vài thuộc tính của thành phần giao diện cần được truyền vào lúc khởi tạo. Những thuộc tính này gọi là style bit. Các style bit định nghĩa sẵn trong lớp SWT. Ví dụ Buttton b = new Button( shell, [stylebits]). Nó có thể sử dụng nhiều style bit bằng các sử dụng toán tử OR |. Ví dụ đối với nút có viền, ta có thể truyền vào thông số sau SWT.PUSH | SWT.BORDER.

    Widget bao gồm các thành phần giao diện trong gói SWT như Button, Label, Combo, List…Một điểm khác với Swing là các widget này phải được gắn vào container chứa nó ngay từ lúc khởi tạo. Container chứa nó có thể là Shell, SashForm, Tab, Group,…

    Trả lờiXóa

nhudinhthuan@gmail.com