I. Giới thiệu về SWTSWT - Standard Widget Toolkit là một gói công cụ mã nguồn mở, được phát triển bởi IBM, cung cấp cho các lập trình viên Java thêm một giải pháp để phát triển Giao diện đồ họa người dùng (GUI – Graphical User Interface). SWT có đầy đủ các GUI API đặc trưng, nó có thể truy cập và sử dụng các thành phần giao diện đồ họa có sẳn của hệ điều hành (Mỗi hệ điều hành chứa một số các thành phần đồ họa tạo nên giao diện người dùng mặc định của nó, ví dụ như các button, các window, các menu…).Việc giao tiếp giữa SWT và hệ điều hành sử dụng Java Native Interface - JNI (Trong phần mở rộng cuối bài viết, chúng ta sẽ tìm hiểu sơ qua về cách thức hoạt động của JNI). Khi xây dựng một ứng dụng trên nền hệ điều hành Microsoft Windows, thì giao diện của SWT chẳng khác gì giao diện được tạo bằng C# hay Visual C++. Điều quan trọng hơn đó là tốc độ của SWT được cải thiện rất nhiều và tài nguyên bộ nhớ chiếm giữ ít hơn so với sử dụng Swing. Chúng ta có thể tham khảo một test speed theo hình 1.1 dưới đây:  Hình 1.1 – Một ví dụ so sánh tốc độ giữa Swing và SWT Chúng ta có thể xem qua các Giao diện được xây dựng bằng C#,Swing, và SWT qua các hình ảnh dưới đây:  Hình 1.2 – Giao diện chương trình Demo Các thuật toán Xử lý ảnh (C#)  Hình 1.3 – Giao diện chương trình Demo Graphics3D (Swing-applet)
Hình 1.4 – Giao diện chương trình Đọc ghi thẻ RFID (SWT)
(Thông tin chỉ mang tính minh hoạ thôi chứ ITS chưa có xe hơi đâu)
Hình 1.5 – Giao diện Thiết lập câu hỏi trắc nghiệm (SWT)
Hình 1.6 – Giao diện Thiết lập đề thi trắc nghiệm (SWT)
Hình 1.7 – Giao diện chương trình Report Weather Information (SWT) Mình đưa ra các hình ảnh là để giúp cho các bạn có được cái nhìn khách quan hơn. Việc lựa chọn cái nào để phát triển giao diện người dùng thì đôi khi không phải vì cái nào mạnh hơn cái nào yếu hơn, mà có lẻ là do mình thích mà thôi. Bản thân mình thì vẫn thường dùng C# và SWT để phát triển các ứng dụng Desktop trên nền Windows. Các chương trình trên được xây dựng qua các đồ án môn học của mình ở trường Học viện Công nghệ bưu chính viễn thông. Các bạn quan tâm có thể liên hệ với mình để lấy mã nguồn thiết kế giao diện của các chương trình trên. Riêng chương trình Demo Graphics3D thì mình sẽ trình bày lại chi tiết và thực hiện chuyển đổi mã nguồn từ Swing – Applet qua SWT trong phần V của bài viết. II. Làm việc với SWT WidgetsCác thành phần cơ bản của SWT là Display, Shell và các Widgets. Display là một tuyến thực thi chính trong SWT, nó chịu trách nhiệm thực thi quản lý và điều khiển giữa các tuyến của GUI và các tuyến khác trong chương trình. Bạn sẽ tìm hiểu về vấn đề sử dụng tuyến trong phần III của bài viết. Shell đóng vai trò là cửa sổ của ứng dụng, nó tương tự như Frame trong AWT và JFrame trong Swing, và khi thuộc tính kiểu của nó được thay đổi thì nó có thể là các Dialog, phụ thuộc vào các Shell khác. Còn các Widgets là các thành phần giao diện con trong gói SWT đó là các thành phần như Button, Label, Textt…, nó tương tự như Component trong AWT và JComponent trong Swing. Và điều khác biệt chính giữa AWT, Swing hay SWT là việc sử dụng các thành phần giao diện đồ hoạ này. Khi dùng Swing, các JComponent thường được khởi tạo trước rồi sau đó được gắn thêm (add) vào các thành phần parent. Khác với Swing các Widgets trong SWT được gắn vào các thành phần chứa nó ngay từ lúc khởi tạo. Một phương thức khởi tạo có khuôn mẫu chung cho hầu hết các thành phần Widgets trong SWT là new WidgetName (parentWidget, stylebits) . Các bạn để ý tới tham số stylebits, đó là thuộc tính của các thành phần giao diện Widgets. Các stylebits này được định nghĩa sẵn trong lớp SWT, và có thể sử dụng nhiều stylebits bằng cách sử dụng toán tử OR |. Mỗi thành phần Widgets được qui định bởi một tập hợp stylebits khác nhau. Ví dụ Button sẽ có tập hợp các stylebits sau: BORDER, CHECK, PUSH, RADIO, TOGGLE, FLAT, LEFT, RIGHT, CENTER, ARROW (with UP, DOWN). (Các bạn có thể tải về file Table_SWT_Stylebits_Events.rar ở cuối mục II này, giải nén để được file Table_SWT_Stylebits_Events.pdf, nội dung của file là một bảng thống kê các stylebits và các events của mỗi thành phần widgets.) Ví dụ bạn muốn gắn một Button vào một thành phần parent widget khác (các thành phần parent widget như: Shell, Composite, Group,…). Thì phương thức khởi dựng như sau: Button myButton = new Button (parentWidget, SWT.PUSH) . Và nếu muốn tạo một nút có viền chúng ta có thể khởi dựng như sau: Button myButton = new Button (parentWidget, SWT.PUSH | SWT.BORDER) . Các stylebits và toán tử OR sẽ mang lại cho bạn rất nhiều thú vị khi khởi dựng để tạo ra các thành phần Widgets trong SWT. Xem qua các ví dụ trong hình 2.1 về tạo Button với các stylebits khác nhau, cũng là Button nhưng khi bạn thay đổi stylebits trong phương thức khởi dựng thì sẽ cho ra các Button với các thuộc tính và cách thức sử dụng nhiều khi hoàn toàn khác nhau.
Hình 2.1 – Các stylebits khác nhau của Button Ngày trước khi mới tìm hiểu về SWT và tới lúc đọc tới phần này mình đã rất nóng lòng muốn tìm hiểu về stylebits và muốn xem các thành phần widgets khác của SWT sẽ có những stylebits như thế nào. Nhưng có lẻ cũng là một kinh nghiệm khi các bạn muốn tìm hiểu về SWT cũng xem qua Eclipse và cách sử dụng nó như thế nào. Đó là một IDE mạnh mẽ và phổ biến như thế nào trong giới lập trình Java thì có lẻ mình cũng không cần nói thêm. Khi mình quyết định theo đuổi và tìm hiểu về SWT cũng là một phần bị lôi cuốn bởi Eclipse. Tìm hiểu rồi bạn sẽ thấy thú vị, khi giao diện của Eclipse làm được điều gì thì bạn cũng có thể làm được một số phần như vậy, bởi vì SWT một trong những plugin cho việc phát triển giao diện của Eclipse. Phần tới của bài viết mình sẽ trình bày với các bạn về Eclipse. Để có thể tiện cho việc theo dõi nội dung bài viết kế tiếp, ngay bây giờ các bạn có thể download bản Eclipse tại đây (http://www.eclipse.org/downloads) . Bảng tổng hợp stylebits và events cho các thành phần widgets : Table_SWT_Stylebits_Events.rar (http://www.javavietnam.org/javavn/mvnforum/getattachment?attach=1629) III. Giới thiệu EclipseLý do đơn giản nhất để sử dụng Eclipse vì đó là một IDE miễn phí tốt nhất, có releases đàng hoàng, và được hầu hết các công ty phần mềm sử dụng để phát triển các ứng dụng Java. Mình sẽ đi thẳng vào việc hướng dẫn sử dụng Eclipse để các bạn quan tâm tới bài viết của mình có thể chạy tốt được các ứng dụng mẫu theo hướng dẫn mà mình sẽ giới thiệu trong suốt bài viết. Và cũng là một lời khuyên cho tất cả các bạn nào đang muốn tìm kiếm cho mình một môi trường phát triển thì hãy chọn lựa Eclipse. wink Bạn đã chuẩn bị cho mình Eclipse chưa? Download tại đây ftp://ftp.madnom.com/pub/eclipse/eclipse/downloads/drops/R-3.2-200606291905/eclipse-SDK-3.2-win32.zip. Giải nén tập tin eclipse-SDK-3.2-win32.zip ra một thư mục nào đó. Ví dụ giải nén trực tiếp ra ổ đĩa C, bạn sẽ được thư mục eclipse, bạn sẽ dễ dàng thấy tập tin eclipse.exe trong đó. Bạn phải chắc chắn rằng máy mình đã cài Java, nếu chưa có thì download tại đây (http://java.sun.com/javase/downloads/index.jsp) . Bây giờ chọn file eclipse.exe để bắt đầu khám phá Eclipse.
Hình 3.1 – Chỉ định đường dẫn tới thư mục chứa các project. Khi chạy Eclipse lần đầu tiên, nó sẽ hỏi bạn chỉ định thư mục chứa các project. Nhấn nút “OK” sau khi đã chỉ định đường dẫn chứa thư mục mà bạn sẽ lưu các project ở đó, xem hình 3.1. Đánh dấu mục "Use this as the default and do not ask again" để Eclipse không hỏi bạn về việc chỉ định đường dẫn cho lần khởi động sau. Công việc tiếp theo là tạo một project. Chọn File ->New ->Project…như hình 3.2 dưới đây.
Hình 3.2 –Tạo project. Hộp thoại “New Project” hiện ra như hình 3.3, bạn sẽ chọn Java project. Nhấn nút “Next >” để tiếp tục.
Hình 3.3 –Chọn project. Hộp thoại “New Java Project” hiện ra như hình 3.4. Đặt tên cho project. JRE trong hệ thống của bạn sẽ được tìm thấy và liệt kê, bạn sẽ chọn phiên bản JRE thích hợp cho ứng dụng. Mặc định là phiên bản JRE mới nhất trên hệ thống. Bạn phải lưu ý trường hợp này khi trên máy bạn có nhiều phiên bản JRE. Chọn “Create separate source and output folders” để Eclipse tạo ra hai thư mục riêng biệt là “src” chứa các file source code .java của chương trình và thư mục “bin” chứa các file .class. Nhấn nút “Finish” để kết thúc việc quá trình tạo mới một project.  Hình 3.4 –Thiết lập các thông số cho project. Lúc này bạn sẽ thấy trong khung Package Explorer hiện lên các cây thư mục của Project vừa mới tạo. Nếu không thấy khung Package Explorer, bạn vào menu Window -> Show View -> Package Explorer. Hiện tại thư mục src chưa có tập tin nguồn java nào cả. Nhiệm vụ của chúng ta là tạo ra một tập tin nguồn cho một ứng dụng SWT đơn giản. Bạn chọn thư mục src -> new -> Class theo minh hoạ của hình 3.5.
Hình 3.5 – Tạo một lớp Java. Bạn sẽ thấy hiện ra hộp thoại “New Java Class”, bạn đặt package là “mypackage”, tên của lớp là “HelloSWT”, như hình 3.6.  Hình 3.6 – Đặt tên cho lớp. Tiếp theo bạn nhập nội dung đoạn code sau vào. Đừng lo lắng vì thấy những thông báo lỗi. Lỗi này là do chưa xác định được các lớp trong thư viện SWT. Bạn sẽ phải có một số thủ tục sau để hoàn thành và chạy ứng dụng SWT đầu tiên. package mypackage; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; public class HelloSWT { public HelloSWT(){ Display display = new Display(); Shell shell = new Shell(display, SWT.CLOSE); shell.setText("First SWT Application"); shell.setSize(300, 200); Label helloLabel = new Label(shell,SWT.BORDER|SWT.CENTER); helloLabel.setText("Hello SWT! Good night ITS !"); helloLabel.setSize(250,20); helloLabel.setLocation(10,10); shell.open(); while(!shell.isDisposed()){ if(!display.readAndDispatch()) display.sleep(); } display.dispose(); } public static void main(String[] agrs){ new HelloSWT(); } } Code 1.3.1 – Một chương trình SWT đơn giản Để tiện cho các bạn đã có sẳn Eclipse và các bạn không có Eclipse, mình sẽ trình bày cách để có thể chạy chương trình theo cả 2 cách: chạy trực tiếp với Eclipse và chạy từ dòng lệnh. Việc đầu tiên là bạn download SWT về tại đây ftp://ftp.madnom.com/pub/eclipse/eclipse/downloads/drops/R-3.2-200606291905/swt-3.2-win32-win32-x86.zip. Giải nén tập tin swt-3.2-win32-win32-x86.zip vào một thư mục bất kỳ. Copy các file .dll vào thư mục <JRE_HOME_DIR> bin. và copy file swt.jar vào thư mục <JRE_HOME_DIR> lib\ext .(Trường hợp trên máy mình là C:\Program Files\Java\jre1.5.0_08\bin và C:\Program Files\Java\jre1.5.0_08\lib\ext). Khởi động lại Eclipse bạn sẽ thấy các lỗi thông báo không còn nữa vì lúc này JRE System Library đã được thêm vào gói swt. Việc đóng gói ứng dụng SWT mình sẽ trình bày ở phần sau. Để chạy được ứng dụng, đối với Eclipse, bạn vào menu Run -> Run. Hộp thoại “Run” sẽ xuất hiện như hình 3.7. Bạn chọn Java Application, và chỉ tới Main class.
Hình 3.7 – Chạy chương trình với Eclipse. Nhấn nút “Run” để chạy chương trình. Để chạy chương trình từ dòng lệnh, nhập đoạn code trên bỏ cái dòng “package mypackage;” trên cùng (để đơn giản việc thông dịch laughing ) và lưu vào một file HelloSWT.java. Công việc hết sức đơn giản tiếp theo là mở cửa sổ “cmd” của Windows bằng cách vào Start -> Run -> nhập cmd -> Enter. Tới lúc này thì “cd” tới thư mục chứa file HelloSWT.java. Thực hiện thông dịch và chạy như một chương trình Java bình thường, gõ lệnh javac HelloSWT.java -> thu được file HelloSWT.class -> gõ lệnh java HelloSWT để chạy chương trình. Và hình 3.8 là hình minh hoạ cho đoạn code 1.3.1, chương trình Hello SWT.
Hình 3.8 – Chương trình Hello SWT. Tiếp theo mục IV của phần I, chúng ta sẽ cùng làm rõ các bước của một chương trình SWT. Và chúng ta sẽ được trả lời câu hỏi: Có thể thêm được các thành phần của AWT hoặc Swing vào SWT không? Đón đọc. Ví dụ minh họa : HelloSWT.rar (http://www.javavietnam.org/javavn/mvnforum/getattachment?attach=1630) Giải nén gồm 2 tập tin HelloSWT.java và HelloSWT.class. Tác giả : ITS JavaVietnam.org
|