java - JPopupMenu 在子弹出窗口打开时关闭

标签 java swing jpopupmenu

我在 JPopupMenu 中有一个 JComboBox(以及其他组件)。事实证明,每当我打开组合框的弹出窗口(选择一个项目)时,父 JPopupMenu 就会关闭。我一直试图找到一种方法来覆盖此功能,但无济于事。

有没有人有任何建议来防止关闭父级 JPopupMenu?谢谢!

最佳答案

这不可能直接实现,很难覆盖已知的 bug ,另一方面,Swing 不允许同时使用两个轻量级弹出组件

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

public class Test {

    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setSize(400, 400);
        frame.setVisible(true);
        String[] list = {"1", "2", "3", "4",};
        JComboBox comb = new JComboBox(list);
        final JPopupMenu pop = new JPopupMenu();
        pop.add(comb);
        frame.addMouseListener(new MouseAdapter() {

            @Override
            public void mousePressed(MouseEvent e) {
                System.out.println("mousePressed");
                pop.show(e.getComponent(), e.getX(), e.getY());
            }
        });
    }
}

但解决方法非常简单,使用 JWindows 或未修饰的 JDialogJComboBox 而不是 JPopup

关于java - JPopupMenu 在子弹出窗口打开时关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8511443/

相关文章:

java - 如果里面有 JPanel,JPopupMenu 会动态改变大小

java - 布局JPopupMenu : How to provide different size for menu items in same menu

java - 从 TimerTask 的运行方法更新 TextView 时出错

java - 如何访问 Controller 上 Struts ActionForm 中的标签值

java - 使用 SELECT COUNT(*) 获取 ResultSet 的大小

java - 当用户按 Enter 时禁用 JTextArea 调整大小

java - 当形状位于 JPanel 外部时自动滚动

Java 窗口重复预防

java - "Always on Top"带有 Java 的 Windows

java - 在java中动态更新SystemTray