首页 > 解决方案 > 一旦我的窗口显示在 linux/mac 中,如何确保用户不能做任何其他事情

问题描述

我有下面的代码,这将使窗口始终显示在顶部,直到用户关闭,即使我已经实现了焦点侦听器,并且当焦点设置为始终顶部并重新获得焦点时,这在 Windows 中非常有效。在 mac 和 linux 用户可以切换到不同的桌面/屏幕,有没有办法复制窗口,如果用户在一个地方关闭,如果关闭所有东西(基本上是同步的)。这不是 kiosk 应用程序,应用程序运行是普通用户机器,我想确保当我的应用程序提示时,用户应该输入并且他不应该逃跑

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();}
    }

标签: javaswingawt

解决方案


推荐阅读