2015-08-12 4 views
4

У меня есть ситуация, когда контекстное меню потенциально может содержать сотни элементов меню, добавленных к нему. По умолчанию в контекстном меню будут отображаться кнопки прокрутки в верхней/нижней части всплывающего окна, но он занимает полную высоту экрана. Я попытался установить значения maxHeight и prefHeight, но это не повлияло.Как создать прокручиваемое контекстное меню в JavaFX?

В идеале я хотел бы показывать полосу прокрутки вместо кнопок прокрутки вверху и внизу (т.е. положить ее в панель прокрутки).

Вот фрагмент кода, который я в настоящее время имею:

ContextMenu menu = new ContextMenu(); 
menu.setMaxHeight(500); 
menu.setPrefHeight(500); 
for(TabFX<T> tab : overflowTabs) { 
    MenuItem item = new MenuItem(tab.getTabName()); 
    if (tab.getGraphic() != null) item.setGraphic(tab.getGraphic()); 
    item.setOnAction(e -> { 
    select(tab); 
    layoutTabs(); 
    }); 
    menu.getItems().add(item); 
} 
Point2D p = overflowBtn.localToScreen(0, overflowBtn.getHeight()); 
menu.show(overflowBtn, p.getX(), p.getY()); 

Есть обходной путь для этого?

ответ

1

У меня была такая же проблема, и я решил ее с помощью класса javafx.stage.Popup с ScrollPane, который содержит VBox и содержит элементы меню.

Popup popup = new Popup(); 
VBox vBox = new VBox(); 
for (int i = 0; i < 4; i++) 
{ 
    Button item = new Button("item " + i); 
    item.setOnAction(...); 
    vBox.getChildren().add(item); 
} 
ScrollPane scrollPane = new ScrollPane(vBox); 
scrollPane.setMaxHeight(500);//Adjust max height of the popup here 
scrollPane.setMaxWidth(200);//Adjust max width of the popup here 
popup.getContent().add(scrollPane); 
popup.show(rootWindow); 

Примечание: Так как вы не можете поместить MenuItem в VBox, я использовал в примере с Button, потому что она имеет метод setOnAction(...). Но вы можете использовать все, что вам нравится :)

Смежные вопросы