2012-10-12 67 views
5

Tôi có một câu hỏi chung liên quan đến Java.Làm cách nào để làm mới GUI trong Java?

Tôi đang viết một ứng dụng có menu GUI. Tôi đang cố gắng thay đổi một phần của menu GUI dựa trên việc chọn nút radio.

Tôi có cần phải:

  1. Vẽ lại toàn bộ cửa sổ hoặc chỉ cần cập nhật một phần với:

    setVisible(true)? 
    
  2. Nếu tôi chỉ sử dụng các tuyên bố từ # 1 trên .. GUI là tốt - cho đến khi tôi di chuyển chuột qua nó và sau đó tôi thấy sự lựa chọn nút trước đó. Tôi đang làm gì sai?

+0

tôi nghĩ rằng có một phương thức paint() – amphibient

+0

repaint() có lẽ là những gì bạn đang sử dụng – jozefg

+0

Tôi đã thử phương thức repaint() và nó không hoạt động chút nào. Tôi đã thử setVisible (true) cùng với điều đó và điều đó cũng không hoạt động. – ironmantis7x

Trả lời

6

Các thành phần Swing có phương thức repaint(), revalidate() và doLayout(). Một trong số đó có lẽ sẽ có thể vẽ lại bất kỳ phần nào bạn muốn. Tuy nhiên, doLayout không phải là thứ bạn phải chịu trách nhiệm, đó là trách nhiệm của công cụ bố trí.

Bạn cũng có thể muốn xem this post, câu trả lời đầu tiên có giải thích khá tốt và liên kết đến một bài viết chi tiết hơn.

Về phần thứ hai của câu hỏi của bạn, tôi không chắc chắn, nhưng chúng tôi có thể cần xem một số mã để có ý tưởng. 'Khu vực thay thế' có thực sự bị xóa khỏi chế độ xem không?

+1

Tôi cần nhập gì để sử dụng repaint() hoặc doLayout()? – ironmantis7x

+0

Bạn sẽ không cần phải nhập thêm bất kỳ thứ gì, đây phải là phương pháp trên các thành phần Swing bạn đang sử dụng - xem tài liệu http://docs.oracle.com/javase/6/docs/api/java/awt/Component .html. Bất kỳ lớp con nào của Thành phần đều phải có các phương thức đó. – shortstuffsushi

+0

Bạn tránh gọi trực tiếp doLayout, nếu bạn thấy mình ở một vị trí mà đây là điều duy nhất hoạt động thì bạn đã làm một điều sai. doLayout chỉ có hiệu lực hơn với vùng chứa hiện tại của bạn. Thay vào đó, sử dụng invalidate thay vì – MadProgrammer

0

Gọi revalidate() trên thành phần cấp cao nhất.

+0

Tôi mới sử dụng Java vì vậy hãy kiên nhẫn với tôi .... chính xác làm cách nào để gọi revalidate() trên thành phần cấp cao nhất? mỗi khi tôi cố gắng chèn nó vào sau một repaint(), nó nhận được một lỗi trình biên dịch. – ironmantis7x

4

.. trong ứng dụng của tôi, người dùng chọn loại nền tảng thiết bị họ muốn kiểm tra hàng đầu (lựa chọn đó là một bộ hai nút radio ở bên trái). Khi người dùng chọn Android hoặc iOS, nhóm hộp kiểm trung tâm thay đổi để phản ánh nhóm thiết bị Android mà họ có thể kiểm tra hoặc nhóm thiết bị iOS mà họ có thể kiểm tra.

  1. Đặt bảng trong 'nhóm trung tâm'.
  2. Sử dụng CardLayout cho bảng điều khiển.
  3. Thêm cả iOS & điều khiển Android vào bảng điều khiển có bố cục thẻ.
  4. Lật giữa chúng nếu cần.
Các vấn đề liên quan