我有一個可拖動窗格位於另一個窗格內。我想讓子窗格只能在父窗格的邊界內拖動,但默認情況下,子窗格可以在任何地方拖動。如何解決這個問題呢。爲其父窗格內的可拖動窗格設置邊界限制
3
A
回答
1
看看這個demo。該應用程序生成可在整個場景中移動的可拖動標籤。要設置邊界限制,使用以下技術:在onMouseDragged處理程序中,我們計算節點的當前位置,如果它不滿足某些條件,我們不會修改它。特別是:
label.setOnMouseDragged(new EventHandler<MouseEvent>() {
@Override public void handle(MouseEvent mouseEvent) {
//Sets the drag boundaries limit
double newX = mouseEvent.getSceneX() + dragDelta.x;
if (newX > 200 || newX < 10) {
return;
}
label.setLayoutX(mouseEvent.getSceneX() + dragDelta.x);
label.setLayoutY(mouseEvent.getSceneY() + dragDelta.y);
}
});
0
添加到xuesheng answer,而不是
if (newX > 200 || newX < 10) { return; }
使用
if(outSideParentBounds(label.getLayoutBounds(), newX, newY)) { return; }
凡outSideParentBounds
被定義爲:
private boolean outSideParentBounds(Bounds childBounds, double newX, double newY) {
Bounds parentBounds = getLayoutBounds();
//check if too left
if(parentBounds.getMaxX() <= (newX + childBounds.getMaxX())) {
return true ;
}
//check if too right
if(parentBounds.getMinX() >= (newX + childBounds.getMinX())) {
return true ;
}
//check if too down
if(parentBounds.getMaxY() <= (newY + childBounds.getMaxY())) {
return true ;
}
//check if too up
if(parentBounds.getMinY() >= (newY + childBounds.getMinY())) {
return true ;
}
return false;
/* Alternative implementation
Point2D topLeft = new Point2D(newX + childBounds.getMinX(), newY + childBounds.getMinY());
Point2D topRight = new Point2D(newX + childBounds.getMaxX(), newY + childBounds.getMinY());
Point2D bottomLeft = new Point2D(newX + childBounds.getMinX(), newY + childBounds.getMaxY());
Point2D bottomRight = new Point2D(newX + childBounds.getMaxX(), newY + childBounds.getMaxY());
Bounds newBounds = BoundsUtils.createBoundingBox(topLeft, topRight, bottomLeft, bottomRight);
return ! parentBounds.contains(newBounds);
*/
}
相關問題
- 1. WPF窗口拖動/移動邊界
- 2. 使窗口在特定邊界內可拖動WPF
- 3. 是否有可能爲子窗格設置規則的圓角僅限於JavaFX中的父窗格?
- 4. 如何爲多邊形設置可拖動邊界 - JavaFX
- 5. 題爲窗格CSS設置
- 6. d3在窗格中拖動位置
- 7. 從網格拖動窗口
- 8. 滾動窗格設置滾動位置
- 9. 爲什麼不設置UIView的邊界限制其大小
- 10. 拖放滾動窗格拖放w/jscrollpane
- 11. 在其父邊框內拖動圖像?
- 12. 可移動的WPF無邊界窗口
- 13. 使窗口可以在邊界外拖動
- 14. 自定義div可拖動功能 - 窗口邊界?
- 15. 將窗體設置爲父窗體#
- 16. 滾動窗格內容在窗格中移動。鎖定內容
- 17. HTML5在邊界內可拖動
- 18. 設置子窗格的值
- 19. 設置MovieClip(AS3)的邊界限制
- 20. Dojo:設置內容窗格widgetid屬性
- 21. 創建一個只能在父窗口內拖動的窗口
- 22. Superfish dropdown被表格邊界限制
- 23. 設置錨窗格一類控制器
- 24. 水平滑動格的內容並超過限制窗口
- 25. 如何根據屏幕大小限制可拖動的邊界限制?
- 26. 在父窗口中約束可拖動的子窗口?
- 27. 設置平移/拖動Zoomable自定義相對佈局的邊界限制
- 28. 在WPF中延伸到窗口邊界之外的網格上移動窗口
- 29. 設置一個窗格中的內容與另一FXML文件的窗格
- 30. 儘管設置包含,但無法在其父級之外拖動可拖動元素:窗口
真的謝謝你這對我的作品。但是這個代碼中的一個問題是,如果我們保留「if」語句,它會使窗格比刪除它慢得多。如果能解決這個問題,我會很高興。 謝謝 – viper
我認爲這是一個部分的答案。它回答「我如何限制」,但忽略「在父窗格邊界內」 – c0der
嗯,而不是硬編碼的值,你可以使用屬性,這取決於邊界窗格的邊界。 – xuesheng