【问题标题】:How to lock-down a frame in Java (GUI)如何在 Java (GUI) 中锁定框架
【发布时间】:2011-08-29 04:09:57
【问题描述】:

我正在启动一个 Java 项目,需要一种完全锁定框架的方法。锁定是指:

  • 用户无法关闭它
  • 用户无法拖动
  • 用户无法最小化它
  • 它位于任务栏和其他所有内容的顶部(除非指定)

基本上,这是一个全屏接管。

【问题讨论】:

  • @MaxMaxkie:“这样的事情可以做到吗?”我当然希望不会。
  • Google Java Kiosk 或 Java Kiosk 模式,因为我相信这是您正在寻找的。我见过的大多数解决方案都需要一些直接与操作系统交互的代码,因此您可能需要使用 JNA 或 JNI。
  • 我查看了 Kiosk 模式,但我认为这将是太多的工作(使用 JNA 或 JNI),当我可以让 Full Screen Exclusive 工作时。
  • 是的,工作量很大,但如果您真的想要 Kiosk 功能,那就是您需要做的。我希望您计划在专用的 Kiosk 工作站上使用它,而不是征用一些可怜的 schlub 的计算机。
  • 实际上这是一个移动信息亭类型的项目,但它只是创建某种菜单(可以运行shell命令和东西)。看到您可以使用 Alt+F4 和 Alt+Tab 在 Java 中转义全屏,我正在考虑在 Java 中找到一种方法来捕获击键并禁用它们

标签: java user-interface frameworks awt


【解决方案1】:

尝试使用fullscreen exclusive mode,看看它是否适合您。

【讨论】:

  • 从我读过的内容来看,这似乎是有风险的。您提供的链接一直提到机器可能不支持此功能的可能性。一台机器实际支持它并且不危险的可能性有多大?
【解决方案2】:

你可以试试这样的:

import javax.swing.*;
import java.awt.*;

public class FullScreenTest extends JFrame {

    private GraphicsDevice device;
    private boolean isFullScreen = false;

    public FullScreenTest(GraphicsDevice device) {
        super(device.getDefaultConfiguration());
        this.device = device;
        setTitle("Display Mode Test");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }

    private void initComponents(Container c) {
        setContentPane(c);
        c.setBackground(Color.RED);
    }

    public void begin() {
        isFullScreen = device.isFullScreenSupported();
        setUndecorated(isFullScreen);
        setResizable(!isFullScreen);
        if (isFullScreen) {
            // Full-screen mode
            device.setFullScreenWindow(this);
            validate();
        } else {
            // Windowed mode
            pack();
            setVisible(true);
        }
    }

    public static void main(String[] args) {
        GraphicsEnvironment env = GraphicsEnvironment.
            getLocalGraphicsEnvironment();
        GraphicsDevice[] devices = env.getScreenDevices();
        FullScreenTest test = new FullScreenTest(devices[0]);
        test.initComponents(test.getContentPane());
        test.begin();
    }
}

【讨论】:

  • 我运行了这段代码,我得到了一个很小的小窗口 :) 那可能是我的设备吗?
  • @MaxMackie 你能打印出isFullScreen boolean 的值并告诉我它是什么吗?
  • 实际上得到了这个工作,非常感谢 - 这正是我所需要的。但是,这可以在任何计算机上使用吗?它有什么限制?
  • 转念一想,我认为全屏独占模式并不能帮助您实现您想要做的事情。尽管该应用程序显示为全屏,但在我的 Mac OS 10.6 机器上,我可以使用 Cmd-Q 轻松终止该进程。您的要求之一是用户不应该能够关闭应用程序,rt?有关全屏独占模式的更多详细信息,请参阅download.oracle.com/javase/1.4.2/docs/guide/awt/… 和bugs.sun.com/bugdatabase/view_bug.do?bug_id=4189326。
  • 是的,我在玩它,它可以被杀死。但是 ALT-F4 之类的东西不是简单的键盘快捷键吗?可以禁用吗?
猜你喜欢
  • 1970-01-01
  • 2011-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-22
  • 1970-01-01
  • 1970-01-01
  • 2015-01-16
相关资源
最近更新 更多