【发布时间】:2010-05-11 00:00:05
【问题描述】:
如果我创建一组要在 JFace 应用程序中使用的动作并将图像分配给这些动作,这些图像会同时显示在工具栏(我想要它们的位置)和菜单中(我不想要的位置)他们)。
除了提供两组完全独立的动作(这首先消除了部分动作点)之外,我如何安排这些图像仅显示在工具栏中,而菜单仅显示文本?
【问题讨论】:
如果我创建一组要在 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
}
【讨论】:
我最终基本上复制了动作,配对,一个有图像,一个没有,因此首先消除了动作的好处(叹气)。另一方面,由于每个动作都只是调用控制器中的一个方法来执行工作,因此不会太隐蔽,将这些对组合在一起可以合理地清楚发生了什么。
【讨论】: