Các nền tảng nào bạn nên chọn để lập trình ứng dụng Java Desktop?
Công ty Vĩnh Cửu tuyển dụng lập trình viên Java

1- Giới thiệu

Thực tế có một số câu hỏi thông dụng với Java:

  • Tôi nên chọn giải pháp nào để lập trình một ứng dụng Desktop
  • Có một giải pháp nào để lập trình một website có giao diện giống ứng dụng Desktop không.

Trong tài liệu này tôi sẽ trả lời tổng quan về câu hỏi trên đồng thời có các giải pháp giúp bạn làm được điều đó.

Ứng dụng Desktop:

Đây là một ứng dụng Desktop viết bằng Java (Java Swing):

Ứng dụng web:

Và đây là một ứng dụng Web có giao diện giống giao diện một ứng dụng Desktop, nó được viết trên Eclipse RAP:

2- Lập trình Java ứng dụng Desktop

Thực tế để lập trình ứng dụng Desktop bạn có 2 lựa chọn
  • Sử dụng Swing - Là một thư viện tích hợp sẵn trên JDK và có khả năng chạy trên mọi hệ điều hành khác nhau (Window, Unix, Mac OS,..)
  • Sử dụng SWT - Là một thư viện để lập trình ứng dụng Desktop được phát triển bởi IBM. Nó có khả năng chạy trên mọi hệ điều hành khác nhau (Window, Unix, Mac OS,..)
Đây là hình ảnh một ứng dụng Desktop viết bằng SWT và chạy trên các hệ điều hành khác nhau:
Đây là hình ảnh ứng dụng Desktop viết bằng Swing. Với "Look And Feel" mặc định trông nó khá ngô nghê. Trong lập trình bạn có thể chọn một L-A-F khác để có được giao diện giống với Window hoặc Linux nếu muốn.

2.1- Swing

AWT (Abstract Window Toolkit) - là một bộ thư viện được phát triển dành cho lập trình Desktop có sẵn trong JDK, tuy nhiên đáng tiếc là nó hoạt động không như mong muốn trên các hệ điều hành khác nhau. Đó là lý do Swing được ra đời thay thế cho AWT, để đảm bảo rằng nó chạy tốt trên các hệ điều hành khác nhau.

Swing xây dựng giao diện đồ họa hoàn toàn bằng Java. Và chạy trên mọi hệ điều hành. Nó không thay thế AWT mà thừa kế từ AWT, đây là một điểm yếu của nó là bối rối những người lập trình, một số lượng lớn các class thuộc AWT giờ đã không còn được dùng nữa, hoặc nó lại là class để các class của Swing thừa kế. Theo tôi chính điều này làm Swing bị đánh giá thấp.

2.2- SWT (Standard Widget Toolkit)

SWT (Standard Widget Toolkit) là một thư viện lập trình ứng dụng Desktop được phát triển bởi IBM. Nó không phát triển đồ họa hoàn toàn bằng Java. Khi chạy trên hệ điều hành nào, nó cố gắng tận dụng các giao diện đồ họa của hệ điều hành đó (Button, Label, ...) và chỉ tạo đồ họa thành phần mà hệ điều hành đó không có bằng Java.

Nếu lập trình SWT tốt nhất bạn chọn IDE Eclipse để lập trình. Eclipse có thể tích hợp Plugin WindowBuilder hỗ trợ kéo thả các thành phần giao diện vô cùng dễ dàng. WindowBuilder vốn là một sản phẩm thương mại nay đã được miễn phí sử dụng khi tích hợp vào Eclipse.

2.3- So sánh SWT và Swing

Swing là một thư viện thuần Java, khi bạn lập trình xong ứng dụng bạn có thể sét đặt Look And Feel (Nhìn và cảm nhận) để có một giao diện giống của Window, hoặc Linux hoặc Mac Os,...  Có sẵn một số Look And Feel trên Jdk bạn có thể sử dụng hoặc có thể mua các L-A-F. Như vậy bạn có chạy một ứng dụng Swing trên nền window mà giao diện hiển thị lên lại là của Linux, Mac Os, ..

Đây là một link giới thiệu về các L-A-F đẹp:
SWT - Đây là một thư viện không viết hoàn toàn bằng Java. Khi nó chạy trên hệ điều hành nào nó cố gắng tận dụng các thư viện thành phần của hệ điều hành đó (chẳng hạn tận dụng các Button, Label, Frame, ...), và chỉ dùng Java để vẽ các thành phần nếu nó không có trên hệ điều hành. Như vậy về tốc độ SWT nhanh hơn Swing.
Với SWT chúng ta không có khái niệm Look And Feel như Swing. Khi bạn chạy ứng dụng trên nền hệ điều hành nào, giao diện sẽ mang đặc tính của hệ điều hành đó.

So sánh tốc độ:

2.4- Bạn nên chọn SWT hay Swing?

Tôi nghĩ rằng bạn nên chọn SWT cho việc lập trình ứng dụng Desktop vì đây là một bộ thư viện phong phú các thành phần giao diện khác nhau. Hơn nữa nó là bộ thư viện ra đời sau Swing, nó học hỏi và giải quyết các yếu điểm của swing.
SWT với các bộ thư viện mở rộng đang được phát triển thêm, chẳng hạn như Nebula.
Eclipse phát triển một nền tảng mới gọi là RAP (Remote Application Platform) - RAP cho phép bạn lập trình các ứng dụng có giao diện giống các ứng dụng Desktop, và lại sử dụng các class quen thuộc có trong SWT. Như vậy bạn có thể viết một ứng dụng mà có thể chạy cả trên nền web và chạy cả trên nền Desktop. Đây là một điểm mạnh nếu bạn chọn SWT.

Hãy xem một Demo chương trình viết bằng RAP:

 

3- Công nghệ của Eclipse

Chúng ta cần có một cái nhìn về công nghệ của Eclipse
RCP (Rich Client Platform) : Là một Platform sử dụng thư viện SWT để lập trình các ứng dụng Desktop. Chạy trên mọi hệ điều hành khác nhau.
(Chi tiết hơn RCP phía dưới.)
RAP (Remote Application Platform): Là một Platform sử dụng thư viện RWT để lập trình các ứng dụng chạy trên Web giống ứng dụng Desktop.
  • RWT (RAP Widget Toolkit) là bộ thư viện với các class cùng tên với class của SWT, và có các method tương tự, giúp bạn lập trình các ứng dụng RAP chạy trên Web. Chính vì đặc tính này chỉ cần 1 source code, bạn có thể chạy ứng dụng trên nền Desktop hoặc trên nền Web.
RAP chạy tốt trên các trình duyệt khác nhau.
Tabris - Là một bộ thư viện viết các ứng dụng Mobile, và chạy được trên các loại Mobile khác nhau.

4- RCP làm được những gì?

RCP (Rich Client Platform) : Là một Platform sử dụng thư viện SWT để lập trình các ứng dụng Desktop. Chạy trên mọi hệ điều hành khác nhau, nó chính là platform viết ra Eclipse IDE.
Như vậy RCP là một Platform sử dụng SWT làm cơ sở để xây dựng lên. Bạn có thể sử dụng Platform RCP để lập trình lên ứng dụng Desktop.

Hình minh họa dưới đây là một ứng dụng đơn giản (Chỉ dùng tới SWT, chưa dùng gì tới những thứ cao cấp của Platform RCP):
Platform RCP đã xây dựng một nền tảng cho phép bạn lập trình ra các giao diện có cấu trúc phức tạp giống IDE Eclipse, nó bao gồm các hệ thống Menu, Toolbar, View, Editor, ...

RCP cũng cho phép bạn phát triển các Plugin tích hợp vào Eclipse mà bạn đang sử dụng.

5- RAP làm được những gì?

RAP (Remote Application Platform): Là một Platform sử dụng thư viện RWT để lập trình các ứng dụng chạy trên Web giống ứng dụng Desktop.
  • RWT (RAP Widget Toolkit) là bộ thư viện với các class cùng tên với class của SWT, và có các method tương tự, giúp bạn lập trình các ứng dụng RAP chạy trên Web. Chính vì đặc tính này chỉ cần 1 source code, bạn có thể chạy ứng dụng như một ứng dụng Desktop hoặc trên Web.
Cũng giống như RCP, RAP là một Platform, nó cũng cho phép tạo ra các ứng dụng có giao diện phức tạp giống IDE Eclipse.

6- RAP & RCP - Tại sao code rất giống nhau?

Đây là cấu trúc 2 Platform:
  • RCP sử dụng SWT (Standard Widget Toolkit)
  • RAP sử dụng RWT (RAP Widget Toolkit)
Đây là một ví dụ code add một Button vào một Composite:
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;

public class MyApplicationWindow  {
 
    .......

   protected void createContents() {
       .......

       Composite composite = new Composite(shell, SWT.NONE);
       composite.setLayout(new GridLayout(1, false));
       
       Button btnMyButton = new Button(composite, SWT.NONE);
       btnMyButton.setText("My Button");
   }

}
SWT, và RWT đều sử dụng class org.eclipse.swt.widgets.Button để tạo Button . Và các component tương tự cũng vậy.

Code của class Button trong SWT (chạy trên desktop) rõ ràng khác với code class Button của RWT (vốn để chạy trên WEB).
  • Class Button của SWT được đóng gói trong file jar có tên org.eclipse.swt_*.jar
  • Class Button của RWT được đóng gói trong file jar có tên org.eclipse.rap.rwt_*.jar
Target Platform là một môi trường thư viện, bạn có thể khai báo.

Bạn có thể khai báo ra 2 Target Platform. Một cái gồm các thư viện RCP, và một cái gồm các thư viện RAP.
  • RCP Target Platform
  • RAP Target Platform
Cùng một code bạn chạy với RCP Target Platform sẽ là một ứng dụng Desktop. Khi chạy với RAP Target Platform sẽ là một ứng dụng chạy trên Web.

Tất nhiên RAP RCP có đôi chút khác biệt, không phải tất cả các thành phần của SWT đều có tương ứng trên RWT, và ngược lại. Tùy trường hợp có thể sử lý các khác biệt  này. Các ứng dụng có thể chạy trên trên cả nền Desktop và Web được biết tới với khái niệm "Single Sourcing".

7- Bạn nên bắt đầu từ đâu.

Nếu bạn theo hướng lập trình RAP-RCP. Bạn cần phải tìm hiểu về SWT, điều đó cũng có nghĩa là bạn sẽ dễ dàng biết RWT.

Làm việc với SWT nghĩa là làm việc với các đối tượng Widget (Button, Label, ..) và sử lý giao diện (Layout). WindowBuilder là một Plugin cho phép kéo thả các thành phần lên giao diện, và tự động tạo code tương ứng.

Bạn có thể tham khảo tài liệu dưới đây, nó hướng dẫn lập trình SWT với WindowBuilder là công cụ trực quan, dễ dàng kéo thả các thành phần giao diện.
Sau khi bạn thành thạo lập trình với SWT bạn có thể tiếp tục với RCP hoặc RAP.