Я использую представление проводника (OutlineView
) внутри диалога, созданного из DialogDescriptor
. Ниже приведена урезанная версия моего кода:
@ActionID(category = "Example", id = "org.example.Test")
@ActionRegistration(displayName = "Test")
@ActionReference(path = "Menu/File", position = 0)
public class SomeAction implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
DialogDescriptor dd = new DialogDescriptor(new MyPanel(), "Titel", true, null);
DialogDisplayer.getDefault().notify(dd);
}
}
class MyPanel extends JPanel implements ExplorerManager.Provider {
private final ExplorerManager em;
public MyPanel() {
em = new ExplorerManager();
em.setRootContext(new MyNode());
add(new OutlineView());
}
@Override
public ExplorerManager getExplorerManager() {
return em;
}
}
class MyNode extends AbstractNode {
public MyNode() { super(Children.LEAF); }
@Override
public Action[] getActions(boolean context) {
return new Action[] { SystemAction.get(DeleteAction.class) };
}
@Override
public boolean canDestroy() {
return true;
}
@Override
public void destroy() {
// Never called
}
}
Когда вызывается действие, отображается диалоговое окно, и в виде структуры отображается корневой узел. Однако выбор Удалить из контекстного меню узла открывает диалоговое окно подтверждения для удаления того, что было выбрано в активном TopComponent
за модальным диалоговым окном. Как заставить системное действие Удалить рассмотреть выбор в диалоговом окне? Я думаю, что мне нужно что-то похожее на это
ActionMap map = getActionMap();
map.put("delete", ExplorerUtils.actionDelete(em, true));
associateLookup(ExplorerUptils.createLookup(em, map));
взято из TopComponent
, но не могу понять, что идет не так. Таким образом, любые указатели очень ценятся.