Ответ 1
Это сложно сделать с текущим API JavaFX 2.2.
Вот несколько вариантов.
Используйте MenuButton с графическим набором в нем MenuItem
Это подход, использованный в кнопке со всплывающим меню, показанным ниже исполняемый пример кода.
Использовать PopupControl
Посмотрите, как ColorPicker делает это в нем code.
ColorPicker расширяет PopupControl. Вы можете это сделать, но не все API, необходимые для создания собственного PopupControl, в настоящее время являются общедоступными. Итак, для JavaFX 2.2 вам придется полагаться на внутренние классы com.sun, которые устарели и будут заменены общедоступными классами javafx.scene.control в JDK8.
Используйте ContextMenu
Итак, я думаю, что ваша идея "использовать ContextMenu и добавить панель в MenuItem", вероятно, сейчас является лучшим подходом. Вы должны сделать это, используя CustomMenuItem или установив графику в обычном MenuItem
. ContextMenu
имеет приятную относительную логику позиционирования. A ContextMenu
также может быть вызван MenuButton.
Использование пользовательского диалога
Чтобы сделать это, покажите прозрачную сцену в месте относительно node.
Существует несколько примеров кода, которые вы начали с того, что я временно связал здесь. Образец кода делает относительное позиционирование по сторонам главного окна, но вы можете обновить его для выполнения позиционирования относительно сторон данного node (например, метода show ContextMenu).
Используйте стеклянную панель
Чтобы сделать это, создайте StackPane в качестве корня вашего основного окна. Поместите основную область содержимого в качестве первого node в StackPane, а затем создайте группу в качестве второй node в стеке, чтобы она накладывалась поверх основного содержимого. Как правило, верхняя группа ничего не содержит, но когда вы хотите показать свое всплывающее окно, поместите его в верхнюю группу и переведите его в местоположение по отношению к соответствующему node в своем основном контенте.
Вы можете посмотреть, как привязывающие узлы в это демо используются, чтобы увидеть, как это может быть адаптировано к вашему контексту.
Есть ли соответствующее обновление для JavaFX8?
В Java 8 нет большой разницы в значимости, в общем случае параметры описаны в этой статье на основе функциональности Java 2.2. Java 8 добавляет Dialog и Alert, но они более ориентированы на использование диалогов с границами, титрами и кнопками, а не на желаемую функциональность в вопросе. Возможно, вы можете начать с класса Dialog и сильно настроить его, чтобы получить что-то близкое к тому, что нужно, но вам, вероятно, лучше начать с пустой сцены или PopupControl.