2010-09-22 2 views
6

có cách nào cụ thể để thay đổi giao diện của ứng dụng xoay mà không cần phải khởi động lại ứng dụng mỗi lần LAF bị người dùng thay đổi không?làm thế nào để thay đổi giao diện java swing và cảm nhận mà không cần khởi động lại ứng dụng?

im tìm giải pháp mà người dùng có thể chọn LAF từ hộp thoại cấu hình và thay đổi trực tiếp khi áp dụng mà không phải quay lại để yêu cầu người dùng khởi động lại ứng dụng.

hiện tại tôi nhớ LAF đã chọn trong tệp thuộc tính và đặt nó khi khởi động trước khi bất kỳ cửa sổ nào được mở.

+3

Điều này có hiệu quả không? http://stackoverflow.com/questions/2655929/lookandfeel-not-changing-in-ubuntu/2656085#2656085 –

+0

@tim_yates Thực ra đôi khi không. Người nghe nói riêng sẽ bị sa thải theo một thứ tự khác, điều này không quan trọng nhưng thường không quan trọng. Ngoài ra tôi sẽ không có niềm tin hoàn toàn vào việc gỡ cài đặt PL & F (đặc biệt nếu 'UIResource' không được sử dụng (vì nó không thể với một số lớp và nguyên thủy), thì PL & F có thể phát hiện chính xác xem mã ứng dụng có quan tâm đến thuộc tính thành phần?). –

+0

@Tom Nhưng nó có thể hoạt động nếu nó không quá phức tạp một ứng dụng, và đó là hy vọng duy nhất của một giải pháp làm việc khác hơn là đi cho khởi động lại đầy đủ, mà OP muốn tránh ... –

Trả lời

5

Từ Java tutorial:

Trước tiên, bạn cần phải thiết lập giao diện mới và cảm nhận bằng cách gọi UIManager.setLookAndFeel:

UIManager.setLookAndFeel(lnfName); 

Sau đó, để làm cho componentes hiện phản ánh cái nhìn mới và cảm nhận, hãy gọi SwingUtilities.updateComponentTreeUI phương pháp trên mỗi vùng chứa cấp cao nhất (hộp thoại, khung hình ..). Bạn cũng có thể muốn thay đổi kích thước mỗi vùng chứa cấp cao nhất để thích ứng với những thay đổi về kích thước của các thành phần được chứa của nó:

SwingUtilities.updateComponentTreeUI(frame); // update components 
frame.pack();         // adapt container size if required