【发布时间】:2016-04-09 01:42:57
【问题描述】:
我编写了以下代码来拥有一个 JPopupMenu,它允许对不同的项目进行多项选择。 问题是,一旦鼠标进入显示的 JCheckboxMenuItem 之一,JPopupMenu 就会关闭。如果我将 JCheckboxMenuItem 替换为例如 JLabel,则不会发生此问题,但可以肯定的是,JLabel 不适用于我的目的。 知道什么会引发这个问题吗?知道如何以更好的方式解决这个问题吗?我为新手问题道歉,但我不是 Java 开发人员。提前感谢您的帮助。
JPanel panel = new JPanel();
panel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedborder(),"Select Layers");
panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS));
for (MyAction layer : layers) {
JCheckBoxMenuItem box = new JCheckBoxMenuItem(layer);
box.setIcon(new SquareIcon(myColor));
panel.add(box);
}
JPopup popup = new JidePopup();
popup.add(panel)
JButton button = new JButton("Layers");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
popup.show(button,0,button.getHeight())
}
});
【问题讨论】:
-
MyAction 是做什么的?
-
没有你的 SSCCE / MCVE 不知道,简短,可运行,可编译
-
有没有理由使用JPanel,因为BasicsPopup...,API中默认有BoxLayout,否则要使用JWindow(只复用一个,HIDE_ON_CLOSE,玩setVisible(true/false),包裹成调用后)
-
@Berger MyAction 是一个扩展 AbstractAction 的类,除了设置标签之外,它还简单地覆盖了与每个 JCheckboxMenuItem 关联的 actionPerformed() 方法。
-
@Berger 它只是显示/隐藏链接到菜单项的对象。但我认为问题不在于操作,因为弹出窗口在调用操作之前已关闭,即只需将鼠标光标移动到菜单项上。
标签: java swing jpopupmenu multipleselection