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 と 2 つのボタンの JList です。問題は、カーソルがパネル内に入ると、カーソルが既にパネルに移動しているにもかかわらず、Number Filter メニュー項目がまだ選択され、その 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

  • ButtonModelmouse and key events実装されていないか、API で適切に実装されていない部分にのみ必要です

于 2013-03-08T11:44:54.850 に答える