首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JMenuItem重用

JMenuItem重用
EN

Stack Overflow用户
提问于 2017-07-20 22:49:50
回答 1查看 153关注 0票数 2

下面是最小的工作应用程序:

代码语言:javascript
复制
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import java.awt.Dimension;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class JMenuItemReuse {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(TestFrame::new);
    }
}

class TestFrame extends JFrame {

    public TestFrame() {
        super();

        JPanel panel = new JPanel();

        JPopupMenu menu1 = new JPopupMenu();
        JPopupMenu menu2 = new JPopupMenu();
        JMenuItem item1 = new JMenuItem("reused");
        JMenuItem item2 = new JMenuItem("not reused");

        menu1.add(item1);
        menu2.add(item1); // works if this line is commented
        menu2.add(item2);

        panel.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                super.mouseClicked(e);
                if (SwingUtilities.isRightMouseButton(e)) {
                    menu1.show(panel, e.getX(), e.getY());
                } else {
                    menu2.show(panel, e.getX(), e.getY());
                }
            }
        });
        panel.add(new JLabel("popup-test"));
        add(panel);

        setPreferredSize(new Dimension(400, 400));
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        pack();
        setVisible(true);
    }
}

问题是,当至少一个菜单项被重用时,弹出菜单无法按预期工作。这不是一个大问题,可以通过复制重用的菜单项来轻松避免,但我仍然想知道为什么会发生这种情况。有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-21 12:15:06

JPopupMenu (或任何其他菜单)属于且仅属于一个JMenuItem。不能将一个Swing组件添加到多个容器中;如果这样做,则会自动从上一个容器中删除该组件。实际上,如果你愿意,你可以创建Actions。可以共享操作并将其添加到多个组件(JMenuItems、JButtons等)。您甚至可以启用/禁用操作,该操作将同时启用/禁用所有组件。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45218176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档