Java 如何禁用JFace菜单的所有图像,但在工具栏中保持启用状态

Java 如何禁用JFace菜单的所有图像,但在工具栏中保持启用状态,java,swt,jface,Java,Swt,Jface,如果我创建了一组要在JFace应用程序中使用的操作,并将图像分配给这些操作,那么这些图像将同时显示在工具栏(我需要它们的地方)和菜单(我不需要它们的地方)中 除了提供两组完全独立的操作(这首先消除了部分操作点),我如何安排仅在工具栏中显示这些图像,并使菜单仅显示文本?我自己没有检查这一点,但请查看此方法参见: public int getStyle() { ... } 它是在Action类中定义的,它似乎返回了以图形方式表示动作的接口元素的类型。因此,您可以重写getImageDescript

如果我创建了一组要在JFace应用程序中使用的操作,并将图像分配给这些操作,那么这些图像将同时显示在工具栏(我需要它们的地方)和菜单(我不需要它们的地方)中


除了提供两组完全独立的操作(这首先消除了部分操作点),我如何安排仅在工具栏中显示这些图像,并使菜单仅显示文本?

我自己没有检查这一点,但请查看此方法参见:

public int getStyle() { ... }
它是在Action类中定义的,它似乎返回了以图形方式表示动作的接口元素的类型。因此,您可以重写getImageDescriptor()方法:


我最终基本上复制了动作,配对,一个有图像,一个没有,从而从一开始就消除了动作的好处(叹气)。另一方面,由于每个操作都只调用控制器中的一个方法来执行工作,因此不太隐蔽,将两个操作对组合在一起可以很清楚地说明发生了什么。

我也遇到了这个问题(除了我希望工具栏和菜单有不同的文本)。我最终使用了相同的操作,但有两个不同的例子

// Use this one in the menu
Action a = new Action();

// Use this one in the toolbar
Action a2 = new Action();
a2.setImageDescriptor(img);

或者,您可以将图像描述符存储在工具栏版本的操作中,并将菜单版本的图像描述符设置为null。

不幸的是,据我所知,这不会有帮助——相同的操作用于工具栏和菜单,因此getStyle值在任何情况下都是相同的。
// Use this one in the menu
Action a = new Action();

// Use this one in the toolbar
Action a2 = new Action();
a2.setImageDescriptor(img);