【发布时间】:2021-08-10 07:24:47
【问题描述】:
所以我有一个表项的菜单,我尝试为它添加一个 MenuListener。调试时,第一次单击表时,仅创建侦听器并且不处理事件。在第二次单击时,它的行为应如此。 我有以下代码:
private void createWidgets(Composite composite)
{
//some tabs are created
for (int i = 0; i < numberOfTabs; i++)
{
//tabs are populated with tables
this.tables[i].getTableViewer().getTable().addMenuDetectListener(new MenuDetectListener() {
@Override
public void menuDetected(MenuDetectEvent e) {
Table table = (Table) e.getSource();
addMenuForTable(table);
}
});
}
this.tabFolder.setSelection(0);
}
private void addMenuForTable(Table table)
{
final Menu someMenu = new Menu(table);
table.setMenu(someMenu);
someMenu.addMenuListener(new ChangingMenu(this, table, someMenu));
}
我的自定义 ChangeMenu 类看起来像这样
public class ChangingMenu extends MenuAdapter {
private Menu someMenu;
private SomeView view;
private Table table;
public ChangingMenu(SomeView view, Table viewer, Menu someMenu) {
this.view = view;
this.someMenu= someMenu;
this.table = viewer;
}
@Override
public void menuShown(MenuEvent e) {
MenuItem[] menuItems = this.logChangeMenu.getItems();
for (int i = 0; i < menuItems.length; i++) {
menuItems[i].dispose();
}
addMenu(this.table);
}
private void addMenu(Table table) {
MenuItem menuItem= new MenuItem(this.someMenu, SWT.NONE);
menuItem.setText("Some text here");
//here I have a listener for this menu item that opens some dialog on item click
}
}
因此,在第一次单击表时,会创建更改菜单,但不会以某种方式调用 showMenu。只有第二次点击我才能看到那里声明的菜单项。
【问题讨论】:
-
你在哪里打电话
addMenuForTable? -
我有一个自定义 View 类,在 createWidgetry 方法中我用我的表项调用 addMenuForTable。
-
在这里测试可以正常工作,所以问题可能出在你没有向我们展示的东西上
-
@greg-449 我在调用 addMenuForTable 的地方添加了我的 createWidgetry 方法