0

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

1 回答 1

2
  • 使用JCheckBoxMenuItem,把它们放到ButtonGroup

  • checkBoxItems.addMouseListener(new MouseAdapter()应该ChangeListener, 连同getButtonModel

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

  • ButtonModel仅对于mouse and key events未在 API 中实现或未在 API 中轻松实现的部分需要

于 2013-03-08T11:44:54.850 回答