当前位置: 首页 > 知识库问答 >
问题:

如何修复JPopupMenu隐藏在边框内?

罗伟志
2023-03-14

我需要在对话框中显示菜单。然而,当JPopupMenu隐藏在边框中时,当barder插入很大时。

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

public class PopupMenuBorderInsetsBug {
    public static void main(String[] args) {
        JDialog popupDialog = new JDialog();
        popupDialog.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
        popupDialog.getRootPane().setBorder(new BorderWithInsets(Color.RED));

        JButton btnShowMenu = new JButton("Show Menu");

        JPopupMenu menu = new JPopupMenu();
        menu.add(new JMenuItem("Menu Item"));

        btnShowMenu.addActionListener(e -> menu.show(btnShowMenu, 0, btnShowMenu.getHeight()));
        popupDialog.add(btnShowMenu);

        popupDialog.pack();
        popupDialog.setVisible(true);
    }

    private static class BorderWithInsets extends LineBorder {
        public BorderWithInsets(Color color) {
            super(color);
        }

        @Override
        public Insets getBorderInsets(Component c) {
            return new Insets(10, 10, 30, 10);
        }
    }
}

上面的代码创建了一个对话框,当点击按钮时,菜单应该会出现,但它会隐藏在边框内。像这样

如果边框的插入被更改,因为返回新的插入(10,10,10,10);时,菜单会显示,不会有任何问题。像这样

共有1个答案

东方镜
2023-03-14

问题是由于根窗格的错误使用,您必须将组件放在JDialog的ContentPane中。

请参阅main中的更改:

public static void main(String[] args) {
    JDialog popupDialog = new JDialog();
    popupDialog.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);

    //Use a JPanel as container and set insets and content on it
    JPanel content=new JPanel();
    content.setBorder(new BorderWithInsets(Color.RED));

    JButton btnShowMenu = new JButton("Show Menu");

    JPopupMenu menu = new JPopupMenu();
    menu.add(new JMenuItem("Menu Item"));

    btnShowMenu.addActionListener(e -> menu.show(btnShowMenu, 0, btnShowMenu.getHeight()));
    
    content.add(btnShowMenu);

    //Set the panel as contentPane for the dialog
    popupDialog.setContentPane(content);
    popupDialog.pack();
    popupDialog.setVisible(true);
}
 类似资料:
  • 如何隐藏gg-editor边箭头?

  • 问题内容: 我要做的是,如何在显示警报框后的特定秒数内自动隐藏它? 我所知道的是 不需要这个,我想在几秒钟内显示警报后消失。 所需方案: 显示警报 在2秒内隐藏/终止警报 问题答案: 警报无法实现此功能。但是,您可以使用div 像这样使用:

  • 如果侧边栏中没有内容,我想隐藏它们,不幸的是,有26.000个函数可以调用你的侧边栏,我对此并不感兴趣。我只想隐藏我的侧边栏,如果它们是空的,当它们包含小部件时显示它们。 现在我不确定是应该使用get_sidebar函数还是dynamic_sidebar函数。另外,我想知道我是否应该使用侧边栏的名称。php调用它或函数中的ID。php

  • 问题内容: 我有一个div,我希望将其部分定位在屏幕外,如下所示: 但这会增加页面的大小,使其可以向右滚动。有什么办法可以使该div的一半隐藏并防止滚动查看它? 问题答案: 是的,只需使用创建一个封闭的div ,如下所示:

  • 我在下面的代码中尝试实现的是,默认情况下,当我单击home复选框时,不显示home标题和段落,然后显示它 当我解开它的时候,它就隐藏起来了 我的功能在下面的代码中运行良好,但我无法实现这一点 当我点击home复选框,然后段落显示,当取消点击,然后隐藏 检查我下面的代码,当我运行文件时,我在我的代码中发布,默认情况下,主页段落显示。 但我想实现后点击复选框,然后显示所有的东西。并且我想尝试当我运行页

  • 我有两个div互相覆盖。我只想从覆盖区域删除边框。请看下面的示例代码 此代码将输出为: 但我希望输出为: 我怎样才能做到这一点呢?请帮帮忙。 注意:我正在使用下拉菜单。第一个div实际上用于菜单名称,第二个div用于菜单列表。