2012-03-16 3 views
7

Tôi đang làm việc trên Swing trong một thời gian nhưng chưa bao giờ có tình huống thực tế khi tôi phải gọi setEnabled(false) trong JPanel. Tuy nhiên, đôi khi tôi thấy mã như vậy trong một số gui tinh vi. Nhưng tôi thực sự không hiểu tại sao ai đó muốn sử dụng nó? Vì vậy, vui lòng cho tôi một số ví dụ về các tình huống phổ biến trong cuộc sống thực khi bạn cần sử dụng setEnabled(false) trên JPanel.Lý do gọi đến setEnabled (false) trong JPanel

Cũng trong javadoc nó nói:

Vô hiệu hóa một phần không trẻ em khuyết tật của nó.

thực sự tôi đã gặp lỗi vì bảng bên trong bị tắt JPanel không hiển thị con trỏ thay đổi kích thước chuột khi định lại kích thước cột. Tôi nghi ngờ có những bất ngờ khó chịu khác ở đây.

+0

Tôi tin rằng bạn có thể vô hiệu hóa một cửa sổ cấp cao theo cách này, nhưng không phải là một thùng chứa –

+0

@Hovercraft Full Of Lươn: vẫn JPanel có phương pháp như vậy. Đối với tôi, nó trông giống như một nguồn tiềm ẩn hoàn toàn vô dụng ở đây. Nhưng có lẽ tôi đang nhầm lẫn và nó có một số cách sử dụng thực tế cho JPanel. – GrayR

+0

Làm việc với xích đu giống như cái chết từ một ngàn vết cắt. Một phương pháp không làm gì cả? có thật không? – gdbj

Trả lời

6

Một lý do để getEnabled() phản ánh đúng trạng thái. Hãy xem xét trường hợp một số trình xử lý sự kiện muốn gắn cờ bảng điều khiển không còn được kích hoạt và nó không thận trọng tại thời điểm sự kiện để lặp lại và vô hiệu hóa tất cả các thành phần con. Các phần khác của ứng dụng có thể cần phải kiểm tra trạng thái của bảng điều khiển qua getEnabled() để xác định việc cần làm tại các điểm khác nhau trong ứng dụng.

Cá nhân tôi không bao giờ phải làm điều này nhưng bây giờ bạn đã hỏi và nhận tôi nghĩ rằng tôi có thể sử dụng điều này đôi khi. Cảm ơn. & & + = 1 cho câu hỏi.

+0

Tôi đoán trong trường hợp khi bạn vô hiệu hóa tất cả trẻ em, đây là cách sử dụng hợp lệ. Nếu không, nó có thể dẫn đến lỗi tương tự như lỗi được mô tả trong câu hỏi của tôi. Ví dụ tuyệt vời bằng cách này. Đó là một điều đáng tiếc Swing không có cách nào để vô hiệu hóa tất cả trẻ em của một thành phần trong một dòng mã mặc dù. – GrayR

+1

Một setEnabledAll() trong một lớp utils sẽ đủ dễ dàng. Tôi sẽ thêm một người nào đó cần phải xem nó sẽ được thực hiện như thế nào. – Java42

+0

Cờ trạng thái đơn giản không có nhiều giá trị mà không có hành vi mong muốn liên quan. 'setEnabledAll()' của bạn dường như là một mở rộng rõ ràng đối với JPanel (hoặc thường là phần tử xem bất kỳ, như Component). Tôi tiếp tục tìm đầu trầy như thế này trong Swing. – gdbj

5

Mã khởi động để bật/tắt tất cả các thành phần trong vùng chứa.

JPanel p = new JPanel(); 
p.setEnabled(state); 
setEnabledAll(p, state); 

public void setEnabledAll(Object object, boolean state) { 
    if (object instanceof Container) { 
     Container c = (Container)object; 
     Component[] components = c.getComponents(); 
     for (Component component : components) { 
      setEnabledAll(component, state); 
      component.setEnabled(state); 
     } 
    } 
    else { 
     if (object instanceof Component) { 
      Component component = (Component)object; 
      component.setEnabled(state); 
     } 
    } 
}