【问题标题】:Pop-up window when clicking a JMenuItem单击 JMenuItem 时弹出窗口
【发布时间】:2017-05-10 07:38:10
【问题描述】:

我试图在用户单击JMenuItem 时显示一个弹出窗口。 我有以下代码:

menuAnular = new JMenuItem(w.translate("ETI_ANULAR"),imageAnular);
menuAnular.addActionListener(new ActionListener() {

    @Override
    public void actionPerformed(ActionEvent arg0) {
        JDialog yesNo = new JDialog();
        yesNo.setVisible(true);
    }

});

遗憾的是,这条线没有显示出来。我已经尝试了几种方法来做到这一点,但我看不到任何显示。

【问题讨论】:

  • 我们能看到自定义的 JDialog 类吗?
  • JDialog 是 javax 的 Swing 库中包含的一个类。这是文档:docs.oracle.com/javase/7/docs/api/javax/swing/JDialog.html
  • 对不起,我在官方(doc)中找不到[docs.oracle.com/javase/7/docs/api/javax/swing/…你发布了一个构造函数为JDialog(String x),我们可以看到自定义的 JDialog 类吗?
  • 考虑提供Minimal, Complete, and Verifiable example,这样我们就可以跳过猜谜游戏了
  • “我能问一下它是做什么用的吗?” 直接从马嘴里拿出来。 1) 访问JDialog Java 文档。 2) 在页面中找到setModal。 3) 你可能注意到这个方法继承自java.awt.Dialog 4) 点击链接。 5) Read. - 请注意,SO 不能替代阅读文档。该文档对于编写 Java 代码至关重要。虽然我使用的 IDE 具有链接到 Java Docs 的弹出窗口,但我总是让它们在浏览器的选项卡中打开。

标签: java swing user-interface jdialog jmenuitem


【解决方案1】:
menuAnular.addMouseListener(new MouseAdapter() {
            public void mousePressed(MouseEvent e) {
                final JPopupMenu popup = new JPopupMenu();
                popup.add(new JMenuItem(new AbstractAction("TITLE OF THE NEW JMENUITEM OF THE POPUP") {
                    public void actionPerformed(ActionEvent e) {
                         if (JOptionPane.showConfirmDialog(contentPanel, 
                                "Dialog", "Dialog title", 
                                JOptionPane.YES_NO_OPTION,
                                JOptionPane.QUESTION_MESSAGE) == JOptionPane.YES_OPTION)
                         {
                           //DO SOMETHING
                         }
                    }
                }));
popup.show(e.getComponent(), e.getX(), e.getY());
            }});

新的 POP-UP 会在用户点击的地方创建。

对象“contentPanel”是应用程序的主 JPanel。

希望对你有所帮助。

【讨论】:

  • 对任何接受它们的组件使用ActionListener。它不仅会响应鼠标点击,还会响应键盘输入。
  • 你说得对,我以为他只是想让应用程序对鼠标点击做出反应。
  • 同意,JMenu/JMenuItem有自己的Listener,但是ActionListener是最简单的选择,
猜你喜欢
  • 2022-12-31
  • 2015-06-27
  • 1970-01-01
  • 2012-12-21
  • 2015-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多