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.
- Skinable
- Non-skinable
- 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.
- SystemLookAndFeel: LaF của riêng nền tảng mà ứng dụng đang chạy, được xác định lúc runtime.
- Synth: giúp bạn tạo LaF của riêng bạn với 1 file XML.
- Multiplexing: một cách để sử dụng nhiều LaF cùng lúc.
try { for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { if ("Windows".equals(info.getName())) { javax.swing.UIManager.setLookAndFeel(info.getClassName()); break; } } } catch (ClassNotFoundException ex) { java.util.logging.Logger.getLogger(LabourManagement.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (InstantiationException ex) { java.util.logging.Logger.getLogger(LabourManagement.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (IllegalAccessException ex) { java.util.logging.Logger.getLogger(LabourManagement.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (javax.swing.UnsupportedLookAndFeelException ex) { java.util.logging.Logger.getLogger(LabourManagement.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); }
- 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.
- Nếu không thành công, UIManager sẽ sử dụng LaF được chỉ ra bởi thuộc tính
swing.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. - 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.
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.UIManager.setLookAndFeel(lnfName); SwingUtilities.updateComponentTreeUI(frame); frame.pack();