JavaFX學習筆記——用法技巧總結(二)
如何改變兄弟節點的覆蓋關係
問題
倘若編寫下列程式碼,實現把兩個相交的圓作為一對兄弟節點放入同一個父節點pane中,卻發現不能讓circle覆蓋circle2
Circle circle = new Circle(100,100,50);
circle.setFill(Color.RED);
Circle circle2 = new Circle(150,100,50);
circle2.setFill(Color.BLUE);
Pane pane = new Pane();
ObservableList<Node> list = pane.getChildren();
list.addAll(circle,circle2);
倘若得到的結果會是
在list中處於後面的circle2會覆蓋circle。
由此瞭解JavaFx的Parent渲染機制——按其子節點下標順序依次渲染
解決方法
直接 改程式碼很簡單,交換兩者的add順序即可,不再贅述。問題是有時需要執行時交換順序,則需要利用node不能被共享的機制,在上述程式碼後加上如下程式碼
ObservableList<Node> tmpList = new Pane().getChildren();
tmpList.add(list.get(0));//這時list中處於下標0位置的circle就轉移到了tmpList中,然後0位置的變成了circle2
list.add(list.get(0));
結果如下