2010-06-16 43 views
10

Tôi đang tìm kiếm giải pháp để giữ cho JFrame luôn ở trên cùng và luôn luôn thực sự có ý nghĩa.LUÔN LUÔN trên cửa sổ trên cùng

setAlwaysOnTop(true); 

Điều này sẽ không hoạt động khi tôi bắt đầu trò chơi ở chế độ toàn màn hình. Tôi biết bạn thường không muốn cửa sổ của bạn ở trên đầu nhưng trong trường hợp này nó là bắt buộc.

+2

"luôn ở trên cùng và luôn luôn có ý nghĩa thực sự luôn". Ngay cả khi có hai trong số họ? –

+0

Cũng sẽ chỉ có một phiên bản của ứng dụng này đang chạy. Với tôi luôn muốn nói rằng các ứng dụng toàn màn hình như trò chơi không được ẩn cửa sổ này + cửa sổ toàn màn hình được cho là vẫn hiển thị (ở chế độ nền) –

+0

Trong hệ thống nhiều cửa sổ, chỉ một cửa sổ có thể ở trên cùng tại bất kỳ cửa sổ nào thời gian (Highlander: Cuối cùng chỉ có thể có một). Do đó, yêu cầu luôn ở trên cùng là tốt nhất, yêu cầu * không thể được đảm bảo. Ứng dụng toàn màn hình luôn được đặt ở vị trí cao nhất - "Tôi muốn luôn ở vị trí hàng đầu và có toàn quyền kiểm soát màn hình" - nó luôn luôn dẫn đầu trên thị trường của bạn. –

Trả lời

4

Điều này không thể thực hiện được.

Ví dụ: Trình quản lý tác vụ Windows, ngay cả khi được đặt thành Luôn bật đầu sẽ được các ứng dụng toàn màn hình che phủ.

Điều này là do thực tế là các ứng dụng toàn màn hình thường sử dụng ngữ cảnh đồ họa khác và không thể được chồng lên nhau.

+0

có một hành vi lạ trên Windows 8 (nếu tính) cửa sổ thậm chí ở trên trò chơi nếu được đặt ở trên cùng (tôi gọi nó là một tính năng mặc dù không phải là lỗi) –

2

Bắt đầu quá trình khác để kiểm tra xem cửa sổ có ở trên cùng không, nếu không, hãy đặt nó ở trên cùng.

+0

cách thực hiện điều này? bạn có thể liên kết với một ví dụ không? – pinkpanther

1

Điều này nghe giống như loại câu hỏi mà Raymond Chen luôn phải trả lời tại số http://blogs.msdn.com/b/oldnewthing/. Làm thế nào bạn có thể thực sự thực sự mãi mãi và cho đúng giữ một cửa sổ ở phía trước? Bạn không thể. Bởi vì điều gì sẽ xảy ra nếu cửa sổ của ai đó ELSE sử dụng cùng một thủ thuật để giữ cho bản thân luôn luôn luôn luôn và mãi mãi ở tiền cảnh? Cái nào thắng?

0

Nếu bạn có nghĩa là toàn màn hình như trong DirectX/OpenGL/bất cứ điều gì, tôi không chắc chắn bạn có thể (hoặc nên) thực sự kéo nó đi. Hầu hết các hệ điều hành đều vô hiệu hóa cửa sổ gốc của chúng trong toàn màn hình để cải thiện hiệu suất hiển thị. Swing hoạt động thông qua bộ công cụ cửa sổ gốc.

Bạn có thể viết nội dung nào đó sử dụng bộ hẹn giờ và trong khoảng thời gian ngắn (ví dụ: 200 mili giây) hướng dẫn cửa sổ của bạn chuyển lên trên cùng. Tùy thuộc vào hệ điều hành của bạn, điều này sẽ chính xác những gì bạn cần, hoặc một nguyên nhân khủng khiếp của sự cố hiệu suất hoặc nhấp nháy.

+1

Aye, ý tưởng hẹn giờ sẽ gây ra sự nhấp nháy khủng khiếp cho chắc chắn! – mcandre

1

Đây là một mẫu mã mà nên hữu ích

public class AllWaysOnTop extends JFrame implements WindowListener { 

    AllWaysOnTop() { 
     // Code to setup your frame 
     addWindowListener(this); 
     // Code to show your frame 
    } 

    // The window event handlers. We use WindowDeactivated to 
    // try and keep the splash screen on top. Usually only keeps 
    // the splash screen on top of our own java windows. 
    public void windowOpened(WindowEvent event){}; 
    public void windowActivated(WindowEvent event){}; 
    public void windowDeactivated(WindowEvent event){ 
     toFront(); 
    } 
    public void windowIconified(WindowEvent event){}; 
    public void windowDeiconified(WindowEvent event){}; 
    public void windowClosed(WindowEvent event){}; 
    public void windowClosing(WindowEvent event) {}; 
} 

Reference This forum post

+0

Điều này sẽ không hoạt động nếu ứng dụng khác đầy màn. –

+0

Khi một ứng dụng mới sẽ bắt đầu ở chế độ toàn màn hình. nó sẽ hủy kích hoạt khung này. Và khi ngừng hoạt động, chúng tôi đưa nó lên phía trước. Nên làm việc kỹ thuật. để tôi thử. –

+0

Sau đó, ứng dụng toàn màn hình sẽ bị loại bỏ và tự giảm thiểu không? Tôi nghĩ rằng OP đang tìm kiếm một cách để có cửa sổ của mình hiển thị ở phía trước của một ứng dụng toàn màn hình. –

0

Tôi không chắc chắn nhưng tôi sẽ đặt cược rằng cửa sổ toàn màn hình cũng có Always On Set Top true, và trong trường hợp đó bạn đã vấp vào cõi của hành vi không xác định. Nói chung khi hai cửa sổ được đặt luôn ở trên đầu thì không có sự đảm bảo nào về việc đặt hàng. Tôi nghĩ rằng nói chung mặc dù thứ tự chỉ phụ thuộc vào thứ tự mà trong đó họ đã được thiết lập để luôn luôn trên đầu trang. Vì vậy, trong trường hợp đó tôi sẽ chỉ chờ đợi cho đến khi ứng dụng đã đi toàn màn hình để đặt nó luôn ở trên đầu và xem liệu nó có hoạt động hay không.

Trong các trường hợp khác, tôi thấy mọi người bắt đầu chủ đề và sau đó thỉnh thoảng đặt lại fram luôn ở trên đầu.

Tất cả các giải pháp này đều xấu, vì vậy chỉ cần sử dụng một giải pháp cho phép bạn ngủ vào ban đêm.

0

Tôi biết bài đăng này cũ, nhưng tôi đã gặp sự cố này và tôi đã tìm thấy giải pháp thỏa mãn. Chương trình của tôi có một số thông báo mà tôi muốn luôn ở trên cùng, nhưng khi một bộ phim được nhập toàn màn hình, chúng sẽ biến mất. May mắn thay, chương trình của tôi cập nhật các thông báo này sau mỗi 5 giây và nếu tôi gọi setVisible (true) trên JWindows này, tại mỗi lần cập nhật, chúng sẽ lấy lại vị trí hàng đầu, nếu chúng bị mất.

-1

Tôi đang tìm cách làm điều tương tự như OP, để ứng dụng của tôi chạy ở nền trước trong khi trò chơi của tôi chạy.Nó không hoạt động ở chế độ toàn màn hình nhưng nếu bạn đưa trò chơi vào chế độ cửa sổ và điều chỉnh cài đặt cửa sổ để phù hợp với TV của bạn, nó hoạt động. Tôi chỉ cần frame.setAlwaysOnTop để làm cho nó hoạt động.

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