gpt4 book ai didi

java - 在 Mac 上的 Java 应用程序中禁用弹出菜单

转载 作者:行者123 更新时间:2023-11-29 05:53:04 24 4
gpt4 key购买 nike

我有一个 Java 程序,我在其中启用和禁用菜单。它在 Windows 下运行良好,但在 Mac 上运行时遇到一些问题。

下面是一段演示问题的代码:

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

public class PopTest extends JFrame {
JMenu menu1;
JMenu menu2;

public PopTest() {
menu1 = new JMenu("Menu 1");
menu2 = new JMenu("Menu 2");
menu2.setEnabled(false);

menu1.add(new JMenuItem(new AbstractAction("With popup") {
public void actionPerformed(ActionEvent event) {
JOptionPane.showMessageDialog(PopTest.this,"Popup","Popup",JOptionPane.ERROR_MESSAGE);
menu2.setEnabled(true);
menu2.add(new JMenuItem("New item"));
}
}));

menu1.add(new JMenuItem(new AbstractAction("Without popup") {
public void actionPerformed(ActionEvent event) {
menu2.setEnabled(true);
menu2.add(new JMenuItem("New item"));
}
}));

JMenuBar menuBar = new JMenuBar();
menuBar.add(menu1);
menuBar.add(menu2);
setJMenuBar(menuBar);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(200, 200);
setVisible(true);
}

public static void main(String[] args) {
try {
System.setProperty("apple.laf.useScreenMenuBar", "true");
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch(Exception e) {
System.out.println("Exception: " + e.getMessage());
}

SwingUtilities.invokeLater(new Runnable() {
public void run() {
new PopTest();
}
});

}
}

程序是这样的:

该程序有两个菜单,“菜单 1”和“菜单 2”。从一开始,菜单 1 处于启用状态,菜单 2 处于禁用状态。

菜单 1 有两个项目,它们做几乎相同的事情:它们启用菜单 2 并向其添加一个菜单项。不同之处在于,其中一项在启用菜单 2 之前会显示消息对话框,而另一项则不会。

现在,编译程序并试试这个:

实验 1:选择菜单 1 > 无弹出窗口。现在单击菜单 2,您将看到该菜单有一个名为“新项目”的已启用菜单项。

实验二:关闭程序!再次启动程序。选择菜单 1 > 使用弹出窗口。在消息对话框中单击“确定”。现在单击菜单 2,您将看到该菜单有一个名为“新项目”的禁用菜单项。单击桌面上的其他位置,使应用程序失去焦点。在应用程序中单击。单击菜单 2,您将看到该菜单项现已启用。

在实验 2 中,在您被指示单击桌面上的其他位置之前,应用程序不会失去焦点是非常重要的。否则您将看不到问题。

为什么 Menu 2 中的菜单项在第二个实验中被禁用了?这是一个错误吗?我使用的是 OS X 10.8.2 (Mountain Lion) 和 Java 1.7.0_09。

最佳答案

我可以在 Java 7 中复制这个问题,但不能在 Java 6 中复制。我不明白它为什么这样做,但为我解决它的一件事是将 setEnabled() 移动到 JOptionPane.showMessageDialog() 之上:

    menu1.add(new JMenuItem(new AbstractAction("With popup")
{
public void actionPerformed(ActionEvent event)
{
menu2.setEnabled(true);
JOptionPane.showMessageDialog(Test.this, "Popup", "Popup", JOptionPane.ERROR_MESSAGE);
menu2.add(new JMenuItem("New item"));
}
}));

关于java - 在 Mac 上的 Java 应用程序中禁用弹出菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13196248/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com