Thứ Hai, 27 tháng 5, 2013

Tìm hiểu về giao diện Look and Feel trong Java


Nhiều bạn nghĩ rằng phần mềm Java có giao diện xấu, nhưng có thật như thế không? Các bạn hãy stop 1 phút ghé thăm trang web này. Đó là trang web của một công ty chuyên thiết kế giao diện phần mềm cho khách hàng đặt hàng. Bạn có thể thấy một vài demo của họ trong ảnh slide. Không biết bạn nghĩ sao chứ mình thấy nó rất đẹp và chuyên nghiệp. Thứ họ đã tạo ra và sử dụng là BizLaf Look-and-Feel. Trong bài viết này, chúng ta sẽ cùng tìm hiểu một vài khái niệm cơ bản về Look-and-Feel (LaF). Ở bài sau, mình sẽ giới thiệu cho các bạn một vài LaF đẹp mắt để các bạn tham khảo.

 


Look-and-Feel là gì?

 

Quả thật trước đây, giao diện phần mềm Java thật sự rất nghèo nàn. Nhưng vấn đề này đã được giải quyết sau khi Swing ra đời. Swing mang đến cho Java một kiến trúc thiết kế rất hiểu quả và rõ ràng. Pluggable Look-and-Feel là một trong số những tính năng của Swing. Nó cho phép ứng dụng Swing có thể thay đổi toàn bộ giao diện chỉ với một hai dòng code. “Look” ở đây đại diện cho thành phần GUI bên ngoài của component, trong khi “Feel” đại diện cho phần behave (ví dụ như hiệu ứng khi hover, khi click,…). Bạn có thể tưởng tượng LaF giống như theme trong điện thoại vậy. Chỉ với vài thao tác bấm, bạn có thể chọn qua lại giữa các theme trong điện thoại.


 

Phân loại Look-and-Feel

 

Về cơ bản, LaF có 2 loại:


  • Skinable

  • Non-skinable


Skinable LaF không chỉ thay đổi giao diện của các component trong ứng dụng mà còn thay đổi giao diện của thanh tiêu đề window và border.

JRE cung cấp các LaF sau:


  1. CrossPlatformLookAndFeel: còn được gọi là Java LaF hay Metal LaF. LaF này tạo ra giao diện giống nhau trên tất cả các nền tảng. Nó là một phần của Java API. Đây sẽ là LaF mặc định nếu bạn không chỉ ra LaF trong code.

  2. SystemLookAndFeel: LaF của riêng nền tảng mà ứng dụng đang chạy, được xác định lúc runtime.

  3. Synth: giúp bạn tạo LaF của riêng bạn với 1 file XML.

  4. Multiplexing: một cách để sử dụng nhiều LaF cùng lúc.


Với Linux và Solaris, System LaF là “GTK+” nếu GTK+ 2.2 hoặc mới hơn được cài đặt, ngược lại, System LaF sẽ là “Motif”. Với Windows, System LaF là “Windows”. GTK+, Motif và Windows LaF được cung cấp bởi Sun và tích hợp trong SDK, JRE mặc dù chúng không phải là 1 phần của Java API. Trên MAC, Apple cung cấp JVM riêng. JVM này bao gồm cả LaF riêng cho các ứng dụng chạy trên MAC.


Cài đặt Look-and-Feel

 

Bạn có thể để ý, trong Netbean 7.0+, khi bạn tạo một JFrame, trong hàm main sẽ tự động được chèn code cài đặt Nimbus LaF. Bạn có thể chuyển về Windows nếu bạn muốn (trong trường hợp bạn đang dùng Windows).





  1. try {  

  2.     for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {  

  3.         if ("Windows".equals(info.getName())) {  

  4.             javax.swing.UIManager.setLookAndFeel(info.getClassName());  

  5.             break;  

  6.         }  

  7.     }  

  8. } catch (ClassNotFoundException ex) {  

  9.     java.util.logging.Logger.getLogger(LabourManagement.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);  

  10. } catch (InstantiationException ex) {  

  11.     java.util.logging.Logger.getLogger(LabourManagement.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);  

  12. } catch (IllegalAccessException ex) {  

  13.     java.util.logging.Logger.getLogger(LabourManagement.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);  

  14. } catch (javax.swing.UnsupportedLookAndFeelException ex) {  

  15.     java.util.logging.Logger.getLogger(LabourManagement.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);  

  16. }  




 

UIManager chọn Look-and-Feel như thế nào?

 

UIManager cài đặt LaF theo các bước sau:


  1. Nếu trong code có set LaF (như trên), UIManager sẽ tạo ra một thể hiện của LaF Class được chỉ ra. Nếu thành công, tất cả component sẽ sử dụng LaF này.

  2. Nếu không thành công, UIManager sẽ sử dụng LaF được chỉ ra bởi thuộc tínhswing.defaultlaf. Nếu thuộc tính này được chỉ ra trong cả swing.properties file và trên command line thì trên command line sẽ được ưu tiên.

  3. Nếu kết quả 2 bước trên vẫn không xác định được 1 LaF hợp lệ, JRE sẽ sử dụng Java LaF. Ngoại trừ trên MAC sử dụng LaF riêng.


 

Thay đổi Look-and-Feel sau startup

 

Bạn có thể thay đổi LaF ngay cả sau khi ứng dụng đã hiện lên. Để làm được việc này, bạn gọi phương thức updateComponentTreeUI của SwingUtilities cho mỗi top-level container. Sau đó, bạn có thể phải resize mỗi top-level container này tới size mới để phù hợp với LaF mới.





  1. UIManager.setLookAndFeel(lnfName);  

  2. SwingUtilities.updateComponentTreeUI(frame);  

  3. frame.pack();  




Bạn có thể tham khảo thêm về Look-and-Feel tại Đây

1 nhận xét:

  1. […] bạn chưa biết về Look-and-Feel, bạn có thể tham khảo bài viết của mình tại Đây.   1. Skin Look and Feel JRE: 4 or above Skinnable: Yes Skin Look-and-Feel có hỗ trợ theme. […]

    Trả lờiXóa