2011-12-17 49 views

Trả lời

10

Sử dụng phương pháp JDekstopPane.getSelectedFrame() (Từ doc:. Hiện JInternalFrame tích cực trong JDesktopPane này, hoặc null nếu không JInternalFrame hiện đang hoạt động) hoặc JDesktopPane.getAllFrames() để có được danh sách tất cả JInternalFrames đang hiển thị trong máy tính để bàn và kiểm tra isSelected() phương pháp.

+1

Cảm ơn. Bạn thực sự đã giúp tôi. Tôi đã tìm một cái gì đó như getActiveFrame hoặc getFocusedFram và bỏ qua getSelectedFrame;) –

+1

+1 để sử dụng API. – camickr

2

Tạo List<JInternalFrame> và kiểm tra isSelected() khi bạn lặp lại mặc dù nó.

Phụ lục: Xem thêm điều này example sử dụng Action để chọn khung nội bộ từ trình đơn.

+3

Lưu ý rằng [JDesktopPane.getAllFrames()] (http://docs.oracle.com/javase/7/docs/api/javax/swing/JDesktopPane.html#getAllFrames()) trả về một mảng, vì vậy bạn có thể cũng chỉ lặp lại mảng (thay vì sử dụng danh sách). –

+1

-1 để phát minh lại bánh xe. Hoặc getSelectedFrame() hoặc getAllFrames() sẽ được sử dụng. – camickr

+0

Đó là cảnh sát công bằng. – trashgod

2

Bạn đã xem hướng dẫn Java có tiêu đề How to Use Internal Frames chưa? Trong mã của bạn, bạn cần một số InternalFrameListener (API) (Tutorial) và nghe để kích hoạt/hủy kích hoạt sự kiện. Kích hoạt có nghĩa là khung bên trong được đưa lên đầu; ngừng hoạt động có nghĩa là nó không còn ở trên cùng nữa. Vì JDesktopPane mở rộng JLayeredPane, bạn cũng có thể đặt thứ tự z thành phần được thêm vào đó.

Không lặp qua tất cả các ô - sử dụng sự kiện.

Nếu vì một số lý do bạn thích thăm dò ý kiến ​​giao diện người dùng của mình thay vì sử dụng phương pháp hướng sự kiện, bạn có thể gọi getSelectedFrame trả về số JInternalFrame hoạt động. Tôi không chắc tại sao không ai khác đề cập đến nó.

+0

+1 cho khớp nối lỏng lẻo. Bạn có thể xây dựng? – trashgod

+0

@trashgod nó khá đơn giản, vì 'JInternalFrames' được tạo ra một' InternalFrameListener' được gắn vào mỗi cái theo dõi khung nào đang hoạt động và cái nào thì không. Tôi đã cập nhật câu trả lời của mình một chút trong trường hợp poster không quan tâm đến các sự kiện - 'JDesktopPane' có phương thức' getSelectedFrame'. – Paul

+0

> Trong mã của bạn, bạn cần một InternalFrameListener (API) (Hướng dẫn) và lắng nghe để kích hoạt/hủy kích hoạt các sự kiện. > Kích hoạt có nghĩa là khung bên trong được đưa lên đầu; ngừng hoạt động có nghĩa là nó không còn ở trên cùng nữa. > Vì JDesktopPane mở rộng JLayeredPane, bạn cũng có thể đặt thứ tự z thành phần được thêm vào nó. " Nói cách khác, một mẹo khác về" Làm thế nào để làm cho mã của bạn khó hiểu hơn và ít đơn giản hơn ". Mã của tôi quá đơn giản đến nỗi thậm chí nếu bạn chưa bao giờ sử dụng Java, bạn sẽ hiểu được nó –

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