【问题标题】:Custom JMenuItem自定义 JMenuItem
【发布时间】:2013-03-08 11:30:29
【问题描述】:

是否可以创建一个包含复选框列表的自定义 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);
        }
    });

【问题讨论】:

  • 如需尽快获得更好的帮助,请发帖SSCCE

标签: java swing mouseevent jmenuitem jpopupmenu


【解决方案1】:
  • 使用JCheckBoxMenuItem,把它们放到ButtonGroup

  • checkBoxItems.addMouseListener(new MouseAdapter() 应该是ChangeListener,再加上getButtonModel

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

  • ButtonModel 仅适用于未在 API 中实现或未在 API 中顺利实现的 mouse and key events 部分

【讨论】:

  • JCheckBoxMenuItem 运行良好,但在菜单中包含许多 JCheckBoxMenuItem 似乎不合适。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-26
  • 2011-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多