java - 自定义 JMenuItem

标签 java swing mouseevent jmenuitem jpopupmenu

是否可以创建一个包含复选框列表的自定义 JMenuItem? 示例是 Excel 过滤器弹出菜单:

到目前为止,我所做的是这样的:

JPopupMenu headerPopup = new JPopupMenu();
JMenuItem clearfilter = new JMenuItem ("Clear Filter From Time");
JMenu filter = new JMenu("Number Filter");
filter.add(new JMenuItem("Equals.."));
filter.add(new JMenuItem("Not Equal.."));


JPanel checkBoxItems = new JPanel();

JCheckBox[] checkBoxes = new JCheckBox[200];
initList(checkBoxes);
JList list = new CheckBoxList();
list.setModel(new ListModel(checkBoxes));
JScrollPane scrollPane = new JScrollPane(list);

checkBoxItems.setLayout(new BorderLayout());
checkBoxItems.add(scrollPanel);
JPanel buttonPanel = new JPanel();
buttonPanel.setLayout(new GridLayout(1, 3));
buttonPanel.add(new JPanel());
buttonPanel.add(new JButton("Ok"));
buttonPanel.add(new JButton("Cancel"));
checkBoxItems.add(buttonPanel, BorderLayout.SOUTH);

headerPopup.add(clearfilter);
headerPopup.add(filter);
headerPopup.add(checkBoxItems);

checkBoxItems面板的内容是JCheckBox的JList和两个按钮。 问题是当光标进入面板时,即使光标已经进入面板,数字过滤菜单项仍将被选中,并且其 PopupMenu 仍将显示。

我尝试了这个但没有成功,还有其他方法吗?:

    checkBoxItems.addMouseListener(new MouseAdapter() 
    {
        @Override
        public void mouseEntered(MouseEvent e) 
        {
            filter.setArmed(false);
            filter.setSelected(false);
        }
    });

最佳答案

  • 使用JCheckBoxMenuItem,将它们放入ButtonGroup

  • checkBoxItems.addMouseListener(new MouseAdapter() 应该是 ChangeListener,以及 getButtonModel

  • 这些事件直接在API中实现,不需要添加MouseListener

  • ButtonModel 仅对于 API 中未实现或未舒适实现的部分鼠标和按键事件 是必需的

关于java - 自定义 JMenuItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15292969/

相关文章:

java - android getRelativeTimeSpanString 月份始终是一月

JavaFX。画一个球并从它的中心拖一条线

javascript - mousemove 的触发如何在 Javascript 中工作?

java - 将图像文件添加到 JPanel 作为背景?

Java - 从另一个组件访问 MouseListener 的数据

java - 无法从组合框中选择项目

java - 在java中跟踪鼠标移动

java - Spring中创建的Proxy的Proxy

java - Spring Data MongoDB - 按多个字段排序不起作用

Java:本地连接到 Apache 上的 SQL