2009-03-13 40 views
6

Tôi đang viết một trò chơi nhỏ, với một JFrame giữ trò chơi chính và một JFrame khác hiển thị điểm số. vấn đề là, khi tôi hoàn thành việc xây dựng chúng, điểm số JFrame luôn kết thúc tập trung! Tôi đã thử gọi scoreDisplay.toFront(), scoreDisplay.requestFocus() và thậm chí:Làm cách nào để tập trung vào JFrame?

display.setState(JFrame.ICONIZED); 
display.setState(JFrame.NORMAL); 

Có cách nào để thực hiện tác vụ này không? Cảm ơn trước, john Murano

+0

Để khách truy cập trong tương lai muốn tập trung vào JFrame, vui lòng xem câu trả lời của tôi xuống trang sử dụng 'frame.requestFocus()'. Câu trả lời được chấp nhận giải quyết vấn đề của OP, nhưng giải pháp rất cụ thể cho tình huống của anh ta. –

Trả lời

2

Bạn đã xem xét việc thiết cân bằng tỷ số trong cùng một khung như khung trò chơi?

Tùy chọn có thể (nhanh và bẩn) khác là tạo thứ tự ngược lại hoặc ít nhất (nếu điểm số phụ thuộc vào trò chơi) hiển thị theo thứ tự ngược lại.

score.setVisible(true); 
game.setVisible(true); 

tôi đoán là hiện nay họ là:

game.setVisible(true); 
score.setVisible(true); 
+0

Cảm ơn bạn. Giải pháp này hoạt động hoàn hảo! –

+2

Trong khi giải pháp này giải quyết vấn đề của OP, nó không trả lời câu hỏi tiêu đề. –

6

Chuyển đổi alwaysOnTop

Xem ở đây:

http://forums.sun.com/thread.jspa?threadID=5124278

đọc về toFront trong API 012.351.http://java.sun.com/j2se/1.5.0/docs/api/java/awt/Window.html#toFront

Một số nền tảng có thể không cho phép máy ảo này đặt Windows của mình trên cửa sổ của ứng dụng bản địa, hoặc Windows của máy ảo khác.

Trên hệ điều hành Windows, ví dụ toFront khiến biểu tượng trên Thanh tác vụ thành nhấp nháy, nhưng cửa sổ vẫn nằm ở phía sau .

Chỉ nghĩ rằng sẽ buộc cửa sổ ở phía trước được đặtAlwaysOnTop.

frame.setAlwaysOnTop(true); 
frame.setAlwaysOnTop(false); 
+0

Cảm ơn. Điều này làm việc cho tôi, với báo trước rằng tôi phải gọi cho họ (ngay lập tức) sau frame.setVisible (true). Tôi đoán điều đó có ý nghĩa, nhưng tôi đã làm chúng một cách riêng biệt. – ensignr

-2
frame.setExtendedState(JFrame.MAXIMIZED_BOTH); 
frame.setVisible(true); 

Thử trên ..

6

Gọi phương pháp requestFocus().

Điều này không được đảm bảo để hoạt động, vì có nhiều lý do khiến hệ điều hành không cho phép khung lấy nét. Có thể có một khung khác có mức độ ưu tiên cao hơn trong một ứng dụng khác. Ngoài ra còn có một số máy tính để bàn Linux (nếu tôi nhớ chính xác) không cho phép khung để yêu cầu tập trung.

Để cung cấp cho bạn cơ hội thành công tốt hơn, tôi cũng khuyên bạn nên gọi phương thức toFront() trước khi yêu cầu tập trung.

frame.setVisible(true); 
frame.toFront(); 
frame.requestFocus(); 

Hãy nhớ rằng điều này không được đảm bảo vì xử lý khung, đặc biệt là lấy nét và phân lớp, phụ thuộc vào hệ điều hành. Vì vậy, đặt khung để hiển thị, di chuyển khung về phía trước và yêu cầu lấy nét. Một khi bạn từ bỏ EDT, hệ điều hành có thể sẽ làm cho khung tập trung. Ít nhất, cửa sổ nên ở trên cùng.

0

Chỉ cần thêm dòng mã sau đây vào mã JOptionPaneMessageDialog ... this.setAlwaysOnTop (sai);

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