当前位置: 首页 > 面试题库 >

在Java中创建屏幕外框(或:关闭所有应用程序窗口时,如何避免在Mac上出现空白菜单)?

鄂琛
2023-03-14
问题内容

我正在制作Mac应用程序,并且希望菜单栏看起来正确。

任何Mac用户都知道菜单栏应位于顶部屏幕菜单中。在属性列表文件中将设置apple.laf.useScreenMenuBartrue会消除框内菜单栏,并将当前焦点窗口的菜单栏移至屏幕菜单。

但是,当所有窗口都被隐藏或没有窗口时,没有菜单栏可以移到顶部,而您只是得到一个空白菜单。我听说有一个解决方案,那就是创建一个无人值守的屏幕外窗口。它的唯一目的是菜单,以便其他菜单消失时可以进行填写。

但是,我遇到了很多问题。我似乎无法将窗口移出屏幕,因为Mac不允许您将坐标设置为超出屏幕大小的值。它只是将其剪下,然后定位在边缘。我还需要做其他事情来制作一个离屏窗口吗?


问题答案:

您绝对应该考虑WizardOfOdds的非常有用的答案。正确使用“应用程序菜单”将有所帮助,并且很容易设置Info.plist起步金额。持久File菜单将允许您的应用程序在其他应用程序关闭时打开新窗口。此答案链接到一个简单的示例。

尽管Apple的《
人机界面指南》

是用户期望的出色指南,但您当然可以尝试使用在问题中建议的方法。特别是,您可以尝试setLocation(Short.MIN_VALUE, Short.MIN_VALUE)使用不可见的窗口。另外,WindowEvent如果它以信号形式通知了最后一个可见窗口的关闭,则您可能希望以某种特殊的方式响应。

附录:当您的听众看到最后一个可见的窗口关闭时,请创建一个新的空应用程序窗口。或者,将不可见窗口移动到屏幕上并使之可见,直到用户决定如何继续。

附录:Mac OS X有助于防止将 可见的 窗口表单移出屏幕,但是很容易将 不可见的 窗口置于混乱状态,如下所示。

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JToggleButton;

public class FrameTest extends JFrame {

    private static FrameTest marco;
    private static FrameTest polo;

    private static class MyPanel extends JPanel {

        public MyPanel() {
            super(true);
            final JToggleButton b = new JToggleButton("Test");
            b.addItemListener(new ItemListener() {
                @Override
                public void itemStateChanged(ItemEvent e) {
                    if (b.isSelected()) {
                        polo.setLocation(100, 100);
                        polo.setVisible(true);
                    }
                    else {
                        polo.setVisible(false);
                        polo.setLocation(Short.MIN_VALUE, Short.MIN_VALUE);
                    }
                }
            });
            this.add(b);
        }
    }

    public FrameTest(String title) {
        super(title);
        this.setLayout(new BorderLayout());
        this.add(new MyPanel());
        this.pack();
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    public static void main(final String[] args) {

        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                marco = new FrameTest("Marco");
                marco.setLocationRelativeTo(null);
                marco.setVisible(true);
                polo = new FrameTest("Polo");
                polo.setLocation(Short.MIN_VALUE, Short.MIN_VALUE);
            }
        });
    }
}


 类似资料:
  • 问题内容: 在Swing中,您可以简单地用于在关闭窗口时关闭整个应用程序。 但是,在JavaFX中找不到等效项。我有多个打开的窗口,如果一个窗口关闭,我想关闭整个应用程序。用JavaFX做到这一点的方法是什么? 编辑: 我了解可以覆盖以在窗口关闭时执行一些操作。问题是应该执行什么操作才能终止整个应用程序? 类中定义的方法不执行任何操作。 问题答案: 当最后一个关闭时,应用程序自动停止。目前,您的类

  • 问题内容: 我正在开发一个android项目,当用户下载文件时该项目显示进度对话框。 但是,当用户触摸屏幕时,进度对话框将被关闭,而无需等待100%。我已经尝试使用此: 但这不起作用。 如何避免这种情况? 更新1: 似乎setCancelable(false)可以正常工作。非常感谢您的回答,但是当持久下载并用户决定放弃下载时,这将是不可能的,因为我已经停用了back keyCode: 我该如何解决

  • 问题内容: 当我的窗口(使用Java Swing创建)关闭时,我试图调用一个函数进行清理。在我的初始化代码中,我这样做: 但是,当我按下退出按钮时,永远不会调用函数“ formLoginWindowClosed”。我也尝试过使用java.awt.event.WindowAdapter作为参数创建侦听器,但是它也不起作用。如何创建用于关闭窗口的侦听器?提前致谢。 问题答案: 将框架设置为关闭退出时,

  • 我运行以下代码: 当我运行代码时,pygame窗口打开,但它是一个空白(黑色)屏幕。我还收到以下错误消息:Traceback(最近一次呼叫last): 文件"C:/用户/Draco/OneDrive/文档/编程/graphics.py",第13行,screen.blit(img(0,0))TypeError:'pyplay.Surface'对象不可调用 我试图打开的图像保存为JPG文件。图像保存在

  • 我在找东西,什么也找不到。我最初尝试了以下代码: 但是我得到一个错误,说没有叫做tkinter的模块。

  • 对于JavaFX,通常是: 是否有方法检测TornadoFX视图关闭?