Как отключить все изображения для меню JFace, но оставить их включенными на панели инструментов
Вопрос
Если я создаю набор действий для использования в приложении JFace и назначаю этим действиям изображения, эти изображения отображаются как на панели инструментов (где они мне нужны), так и в меню (где они мне не нужны).
Помимо предоставления двух совершенно отдельных наборов действий (что в первую очередь устраняет часть сути действий), как я могу организовать, чтобы эти изображения отображались ТОЛЬКО на панели инструментов, а в меню отображался только текст?
Решение 3
В итоге я по сути дублировал действия, создавая пары, одно с изображением, другое без, тем самым в первую очередь исключая пользу от действий (вздох).С другой стороны, поскольку каждое действие просто вызывает один метод в контроллере для выполнения работы, это не слишком коварно, а группировка пар вместе дает достаточно ясное представление о том, что происходит.
Другие советы
Я тоже столкнулся с этой проблемой (за исключением того, что мне нужен был другой текст для панели инструментов и меню). В итоге я использовал одно и то же действие, но в двух разных его экземплярах.
// 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 и, похоже, возвращает тип элемента интерфейса, в котором графически представлено действие.Итак, вы можете переопределить метод getImageDescriptor():
public ImageDescriptor getImageDescriptor() {
if (getStyle() == AS_DROP_DOWN_MENU)
return null; // No icon in a menu
return someImageDescriptor; // Actual icon
}