如果我创建了一组要在 JFace 应用程序中使用的操作并将图像分配给这些操作,那么这些图像会同时显示在工具栏(我想要它们的位置)和菜单中(我不想要它们的位置)。
除了提供两组完全独立的动作(首先消除了部分动作点)之外,我如何安排这些图像仅显示在工具栏中,而菜单仅显示文本?
我也遇到了这个问题(除了我想要工具栏和菜单的不同文本。)我最终使用了相同的操作,但它有两个不同的实例。
// Use this one in the menu
Action a = new Action();
// Use this one in the toolbar
Action a2 = new Action();
a2.setImageDescriptor(img);
或者,您可以将图像描述符存储在工具栏版本的操作中,并将其设置为 null 以用于菜单版本。
我自己没有检查过这个,但是给这个方法看看:
public int getStyle() { ... }
它在 Action 类中定义,它似乎返回了 Action 以图形方式表示的界面元素的类型。那么你可以覆盖 getImageDescriptor() 方法:
public ImageDescriptor getImageDescriptor() {
if (getStyle() == AS_DROP_DOWN_MENU)
return null; // No icon in a menu
return someImageDescriptor; // Actual icon
}
我最终基本上复制了动作,配对,一个有图像,一个没有,因此首先消除了动作的好处(叹气)。另一方面,由于每个动作都只是调用控制器中的一个方法来执行工作,所以它并不太隐蔽,将这些对组合在一起可以合理地清楚发生了什么。