さまざまな種類のオブジェクトを階層的に表示する TreePanel があります。地域、都市、場所...
さまざまなレベルでさまざまなコンテキスト メニュー項目を表示できるようにしたいと考えています。例: 地域の miR、都市の miC、場所の miL... 動的構造を実現するために、これを切り取って使用しました。
contextMenu.addListener(Events.BeforeShow, new Listener<MenuEvent>() {
@Override
public void handleEvent(MenuEvent be) {
//First make all menu items invisible
List<Component> menuItems = contextMenu.getItems();
for (Component c : menuItems) {
c.setVisible(false);
}
//And make apprepriate menu items visible
TopologyTreeElement s = tree.getSelectionModel().getSelectedItem();
if (s instanceof TopologyTreeElement.Region) {
miR.setVisible(true);
}
if (s instanceof TopologyTreeElement.City) {
miC.setVisible(true);
}
}
});
ただし、すべてのアイテムが非表示の場合、どのレベルでも空のボックスが表示されます。メニューを完全に表示しないようにしたい。このコード スニペットをメソッドに追加しようとしましたが、役に立ちませんでした。
//Do not show menu if no menu item is invisible
boolean isMenuShouldBeVisible = miC.isVisible() || miR.isVisible();
if (!isMenuShouldBeVisible) {
be.preventDefault();
be.stopEvent();
}
誰でも別のアプローチを提案できますか?