ใน Java มีวิธีที่จะทำให้หน้าต่าง "อยู่ด้านบนเสมอ" ไม่ว่าผู้ใช้จะเปลี่ยนโฟกัสไปที่แอปพลิเคชันอื่นหรือไม่? ฉันค้นหาเว็บแล้วและวิธีแก้ปัญหาทั้งหมดขึ้นอยู่กับอินเทอร์เฟซ JNI บางประเภทที่มีการผูกแบบเนทีฟ นี่เป็นวิธีเดียวที่จะทำไม่ได้? .. หรือว่า?
ใน Java มีวิธีที่จะทำให้หน้าต่าง "อยู่ด้านบนเสมอ" ไม่ว่าผู้ใช้จะเปลี่ยนโฟกัสไปที่แอปพลิเคชันอื่นหรือไม่? ฉันค้นหาเว็บแล้วและวิธีแก้ปัญหาทั้งหมดขึ้นอยู่กับอินเทอร์เฟซ JNI บางประเภทที่มีการผูกแบบเนทีฟ นี่เป็นวิธีเดียวที่จะทำไม่ได้? .. หรือว่า?
คำตอบ:
ลองใช้วิธีนี้ของWindow
คลาส:
มันทำงานในลักษณะเดียวกับค่าเริ่มต้นใน Windows TaskManager: เปลี่ยนไปใช้แอปอื่น แต่จะแสดงอยู่ด้านบนเสมอ
สิ่งนี้ถูกเพิ่มใน Java 1.5
โค้ดตัวอย่าง:
import javax.swing.JFrame;
import javax.swing.JLabel;
public class Annoying {
public static void main(String[] args) {
JFrame frame = new JFrame("Hello!!");
// Set's the window to be "always on top"
frame.setAlwaysOnTop( true );
frame.setLocationByPlatform( true );
frame.add( new JLabel(" Isn't this annoying?") );
frame.pack();
frame.setVisible( true );
}
}
หน้าต่างยังคงอยู่ด้านบนแม้ว่าจะไม่มีการใช้งาน
จากการสังเกตของฉันฉันพบว่าสิทธิ์ AlwaysOnTop มอบให้กับกระบวนการล่าสุดที่ขอให้อยู่ด้านบนเสมอ
ดังนั้นหากคุณมีแอปพลิเคชันที่แอปพลิเคชันsetAlwaysOnTop(true)
อื่นใช้ตัวเลือกนี้ในภายหลังสิทธิ์จะมอบให้กับแอปพลิเคชันที่สอง ในการแก้ไขปัญหานี้ฉันได้ตั้งค่าsetAlwaysOnTop(false)
และอีกครั้งsetAlwaysOnTop(true)
เมื่อใดก็ตามที่มีหน้าต่างอยู่ด้านบนของหน้าต่างปัจจุบัน
ผมได้ตรวจสอบกับในwordweb
windows
WordWeb เป็นหนึ่งในแอปพลิเคชั่นที่ใช้AlwaysOnTop
ตัวเลือกจากไฟล์OS
ฉันไม่แน่ใจว่ามันใช้งานได้กับสถานการณ์ในเกมของคุณหรือไม่
คำเตือน : ฉันไม่ทราบถึงผลข้างเคียง
นี่คือตัวอย่างโค้ด:
import java.awt.event.*;
import javax.swing.*;
public class MainWindow extends JFrame implements WindowFocusListener
{
public MainWindow()
{
addWindowFocusListener(this);
setAlwaysOnTop(true);
this.setFocusable(true);
// this.setFocusableWindowState(true);
panel = new JPanel();
//setSize(WIDTH,HEIGHT);
setUndecorated(true);
setLocation(X,Y);
setExtendedState(MAXIMIZED_BOTH);
setVisible(true);
}
public void windowGainedFocus(WindowEvent e){}
public void windowLostFocus(WindowEvent e)
{
if(e.getNewState()!=e.WINDOW_CLOSED){
//toFront();
//requestFocus();
setAlwaysOnTop(false);
setAlwaysOnTop(true);
//requestFocusInWindow();
System.out.println("focus lost");
}
}
private JPanel panel;
private static final int WIDTH = 200;
private static final int HEIGHT = 200;
private static final int X = 100;
private static final int Y = 100;
public static void main(String args[]){
new MainWindow();}
}
อย่าใช้ setFullScreenWindow เพียงแค่รับขนาดหน้าจอจากนั้น setSize และทุกอย่างจะดี