Я пытаюсь создать «рабочее пространство», в котором пользователи могут открывать несколько контейнеров для отображения отдельной информации. Они должны быть подвижными и иметь большие размеры (например, ScrollPane).
Я успешно создал большую часть функций, однако одна вещь действительно вызывает у меня проблемы, и я не могу понять, в чем проблема.
Я создал следующий класс:
public class WorkspaceMoveableSizeablePane extends Pane
public WorkspaceMoveableSizeablePane(Node view) {
getChildren().add(view);
init();
}
private void init() {
...set up the event handlers....
Я пытаюсь использовать эту панель, обернув существующую панель таким образом в моем WorkspaceController:
@FXML private openSampleWorkspaceNode() {
FXMLLoader loader = new FXMLLoader();
Parent node = loader.load(
this.getClass().getResource("MyView.fxml").openStream());
WorkspaceMoveableSizeablePane dn = new WorkspaceMoveableSizeablePane(node);
pane.getChildren().add(dn);
}
Когда я открываю его таким образом, я могу изменить размер своей панели и перетащить ее, однако дочерние элементы на «узле», который является панелью привязки, остаются на своих текущих позициях, а не скрываются.
Чтобы исправить эту проблему, я обернул AnchorPane в ScrollPane в файле FXML. Это позволило изменить размер - и, как и ожидалось, части за пределами не были видны, а полосы прокрутки появились, однако перетаскивание прекратилось. Когда я попытался отследить событие перетаскивания мышью, оно на самом деле не срабатывало, если только я не изменял размер WorkspaceMoveableSizeablePane.
//Event Listener for MouseDragged
onMouseDraggedProperty().set(event -> {
System.out.println("You are in the Mouse Dragged Event");
if(isTopSelected){
dragPaneToNewLocation(event);
}else if(isResizingHeight) {
handleResizeHeight(event);
}else if(isResizingWidth) {
handleResizeWidth(event);
}
});
Я вернул свой FXML в AnchorPane и изменил WorkspaceMoveableSizeablePane следующим образом, чтобы посмотреть, поможет ли это:
public class WorkspaceMoveableSizeablePane extends ScrollPane
public WorkspaceMoveableSizeablePane(Node view) {
setContent(view);
init();
}
private void init() {
...set up the event handlers....
Как и раньше изменение размера работало, а перетаскивание - нет. Событие перетаскивания мышью никогда не срабатывало. Кроме того, моя панель прокрутки была пустой, в ней ничего не было.
Поэтому я в недоумении, как продолжить эту попытку.
Есть ли ограничение на обработчики событий ScrollPane? Есть ли другое событие, которое я должен слушать? Спасибо!!