是否可以在JavaFX2子列表中更改节点的顺序?我试着set()和Collections.swap()但都扔IllegalArgumentException在Parent在某一时刻,孩子列表包含同一项目在两个位置(当节点是在新的位置,并没有被从老位置删除).父内部有一些标志,JavaFX在内部使用toFront()并且toBack()可以防止异常,但是无法从外部访问它们.
java.lang.IllegalArgumentException: Children: duplicate children added: parent = HBox@1424bf0
at javafx.scene.Parent$1.onProposedChange(Parent.java:307)
at com.sun.javafx.collections.VetoableObservableList.set(VetoableObservableList.java:156)
at com.sun.javafx.collections.ObservableListWrapper.set(ObservableListWrapper.java:281)
at java.util.Collections.swap(Collections.java:532)
Run Code Online (Sandbox Code Playgroud)
Ulu*_*Biy 22
您可以将子项移动到父项的子项列表中
childNode.toFront();
childNode.toBack();
Run Code Online (Sandbox Code Playgroud)
ObservableList<Node> workingCollection = FXCollections.observableArrayList(pane.getChildren());
Collections.swap(workingCollection, 0, 1);
pane.getChildren().setAll(workingCollection);
Run Code Online (Sandbox Code Playgroud)
请参阅此代码:
package swapnode;
import java.util.Collection;
import java.util.Collections;
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Pane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
/**
*
* @author reegan
*/
public class SwapNode extends Application {
@Override
public void start(Stage primaryStage) {
VBox root = new VBox(20);
/* Thid Part Swap Children of Node */
Pane pane = view();
ObservableList<Node> workingCollection = FXCollections.observableArrayList(pane.getChildren());
Collections.swap(workingCollection, 0, 1);
pane.getChildren().setAll(workingCollection);
root.getChildren().addAll(view(),pane);
Scene scene = new Scene(root, 300, 250);
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}
/**
* The main() method is ignored in correctly deployed JavaFX application.
* main() serves only as fallback in case the application can not be
* launched through deployment artifacts, e.g., in IDEs with limited FX
* support. NetBeans ignores main().
*
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
public Pane view() {
HBox pane = new HBox(10);
Button button = new Button("Hello");
TextField field = new TextField("World");
pane.getChildren().addAll(button,field);
return pane;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13277 次 |
| 最近记录: |