gpt4 book ai didi

java - JMenu 在 Windows7 LAF Java7 中使用 focuslost 事件

转载 作者:行者123 更新时间:2023-11-30 11:41:26 25 4
gpt4 key购买 nike

如果在单击另一个组件时弹出菜单仍处于打开状态,则该组件不会获取事件,因为它可能已被弹出菜单占用。一般所有 JPopupmenus 都会发生这种情况。这仅发生在带有 Windows LAF (Windows7) 的 Java 7 中。有解决方法吗?这是一个已知错误吗?

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

public class Test
{
public static void main(String[] s)
throws Exception
{
String lookAnfFeelClassName = UIManager.getSystemLookAndFeelClassName();
UIManager.setLookAndFeel(lookAnfFeelClassName);

JMenu menu = new JMenu("TEST Menu");
JMenuItem menuItem = new JMenuItem("Menu Item 1");

JMenuBar menuBar = new JMenuBar();
menu.add(menuItem);
menuBar.add(menu);

final JButton b = new JButton("Test");
b.setBounds(5, 50, 60, 20);
b.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
//If the Menu is open when I press the button, the putton is not pressed
//so I have to press it again.
JOptionPane.showMessageDialog(b, "Button Pressed");
}
}
);

JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(150, 150);
frame.setJMenuBar(menuBar);
frame.getContentPane().setLayout(null);
frame.getContentPane().add(b);
frame.setVisible(true);
}
}

最佳答案

这是解决问题的魔法线:

UIManager.put("PopupMenu.consumeEventOnClose", Boolean.FALSE);

我在查看 BasicPopupMenuUI 类的源代码后发现了这一点。显然,根据代码中的以下注释,这种行为是一种深思熟虑的设计选择,但对我来说确实感觉像是一个错误。

            // Ask UIManager about should we consume event that closes
// popup. This made to match native apps behaviour.

顺便说一下,它也发生在 Java 5 和 6 中。

关于java - JMenu 在 Windows7 LAF Java7 中使用 focuslost 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12251161/

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