2012-03-09 41 views
6

Có cách nào để thay đổi hình nền mặc định của tất cả các phiên bản của thành phần xoay (ví dụ JPanel) để vẽ bằng nền gradient không? Hoặc tôi sẽ cần phải tạo ra một phần mở rộng của JPanel sơn với một gradient và sau đó sử dụng mà thay vì JPanel ở khắp mọi nơi trong ứng dụng của tôi?Nền gradient mặc định thành phần Swing

+0

Bạn không chỉ cần làm điều này cho nền JPanel, và sau đó làm cho tất cả các JPanels khác không bị mờ? –

+0

@HovercraftFullOfEels, đó cũng là một lựa chọn khác. Nếu tôi muốn mở rộng nó cho các thành phần khác mặc dù, tôi nghĩ rằng tôi vẫn sẽ cần phải mở rộng những thành phần. –

+0

@JeffStorey: có lẽ, nhưng không nhất thiết. Bạn có thể tạo JPanels của mình thông qua một số phương thức factory đơn giản để đặt opaque thành false, hoặc bạn có thể recurse thông qua cài đặt GUI tất cả các JPanels không phải là non-opaque. –

Trả lời

3

IMHO, sẽ dễ dàng hơn khi chỉ phân lớp thành phần Swing và ghi đè phương pháp paintComponent của chúng tôi để vẽ tô màu. Và sau đó, như bạn đã nói, hãy sử dụng thành phần tùy chỉnh này trong toàn bộ ứng dụng.

Có thể khó sử dụng thuộc tính giao diện người dùng vì chúng có thể không nhất quán trên tất cả các LaF.

+0

đó là suy nghĩ ban đầu của tôi. đã không chắc chắn nếu có một cách dễ dàng hơn để làm điều đó. đặc biệt là nếu tôi muốn áp dụng gradient cho nhiều loại thành phần, tôi sẽ cần phải phân lớp tất cả các thành phần. –

+0

@JeffStorey, Trong trường hợp đó, có thể tốt hơn là phân lớp 'JComponent'. – Moonbeam

+0

Tôi không chắc chắn làm thế nào mà sẽ giúp cho nhiều loại thành phần. Hãy nói rằng tôi đã thay đổi nền của một nút, làm thế nào để phân lớp JComponent giúp đỡ ở đây? –

0

Nó không hoàn toàn rõ ràng phạm vi bạn dự định. Ý của bạn là lớp (vì vậy tất cả các phiên bản JPanel đều tuân theo sơ đồ vẽ mới), hoặc bạn có nghĩa là tất cả các thành phần trong Vùng chứa (ví dụ: mọi thứ trong Khung)? Có thể có khả năng để làm điều này tùy thuộc vào lớp thành phần, nơi bạn có thể móc vào là Look and Feel, và trên cơ sở instance thành phần, hoặc phương thức paintComponent(), hoặc nếu bạn cần thay thế cái nhìn tiêu chuẩn của một thành phần hiện có mà bạn không thể ghi đè lên phương thức vì bạn không có quyền kiểm soát nó, bằng cách cung cấp lớp UI của riêng bạn (xem Component.setUI) sau khi thành phần đã được tạo ra.

Ngoại trừ cách tiếp cận paintComponent ghi đè không đơn giản để triển khai. Đối với hầu hết các ứng dụng, cách tiếp cận đơn giản là tốt nhất :)

Các vấn đề liên quan