我试图为JToggleButton
s(特别是JCheckBox
es)编写撤消管理器。每个复选框都有一个项侦听器,可以向撤消管理器添加新的编辑。但是,当我尝试撤消选择时,setSelected(boolean)
方法会触发项侦听器,将撤消添加为另一个UndoableEdit
,因此可以无限期地进行撤消。我解决这个问题的方法是:
ItemListener[] ils = button.getItemListeners();
Arrays.stream(ils).forEach(button::removeItemListener);
button.setSelected(wasSelected);
Arrays.stream(ils).forEach(button::addItemListener);
这有效,但看起来有点凌乱。有更好的方法吗?