package splitpanecontentchangettest; import com.sun.javafx.runtime.VersionInfo; import java.util.Comparator; import javafx.application.Application; import javafx.collections.FXCollections; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.scene.Node; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.control.SplitPane; import javafx.scene.layout.HBox; import javafx.scene.layout.VBox; import javafx.stage.Stage; public class SplitPaneContentChangetTest extends Application { public static void main(String[] args) { launch(args); } private SplitPane sp; @Override public void start(Stage stage) throws Exception { stage.setScene(createScene()); stage.setTitle("Split pane items sorting test : " + VersionInfo.getRuntimeVersion()); stage.show(); } private Scene createScene() { sp = new SplitPane(); sp.setMaxWidth(250); final int SIZE = 2; for (int i = SIZE - 1; i >= 0; --i) { sp.getItems().add(new Label("content " + i)); } Button sort = new Button("Sort content"); sort.setOnAction(new EventHandler() { private boolean ascending = true; private Comparator cmp = new Comparator() { @Override public int compare(Node o1, Node o2) { int result = 0; if (o1 instanceof Label && o2 instanceof Label) { String s1 = ((Label) o1).getText(); String s2 = ((Label) o2).getText(); result = s1.compareTo(s2); System.out.println(String.format("'%s' compareTo '%s' equals %d", s1, s2, result)); } return ascending ? result : -result; } }; @Override public void handle(ActionEvent t) { System.out.println("Calling sort"); FXCollections.sort(sp.getItems(), cmp); ascending = !ascending; } }); Button add = new Button("Add"); add.setOnAction(new EventHandler() { @Override public void handle(ActionEvent t) { sp.getItems().add(new Label("Test")); } }); HBox root = new HBox(10, sp, new VBox(5, sort, add)); return new Scene(root, 400, 300); } }