Skip to content

Instantly share code, notes, and snippets.

@oddbjornkvalsund
Created January 28, 2015 21:57
Show Gist options
  • Save oddbjornkvalsund/42204220f83227af428f to your computer and use it in GitHub Desktop.
Save oddbjornkvalsund/42204220f83227af428f to your computer and use it in GitHub Desktop.
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.SplitPane;
import javafx.scene.control.TextArea;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Priority;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import java.util.List;
import static java.util.Arrays.asList;
public class SplitPaneBugRev extends Application {
private SplitPane outerSplitPane;
private SplitPane innerSplitPane;
private TextArea content1;
private TextArea content2;
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage stage) throws Exception {
final VBox container = new VBox();
outerSplitPane = new SplitPane();
VBox.setVgrow(outerSplitPane, Priority.ALWAYS);
final TextArea staticContent = new TextArea("This text is always visible. This text is always visible. This text is always visible. This text is always visible. This text is always visible. This text is always visible. This text is always visible. This text is always visible. This text is always visible. This text is always visible. This text is always visible. This text is always visible. ");
staticContent.setWrapText(true);
outerSplitPane.getItems().add(staticContent);
innerSplitPane = new SplitPane();
content1 = new TextArea("Content #1. Content #1. Content #1. Content #1. Content #1. Content #1. Content #1. Content #1. Content #1. Content #1. Content #1. Content #1. Content #1. Content #1. Content #1. Content #1. Content #1. Content #1. Content #1. Content #1. Content #1. Content #1. Content #1. Content #1. Content #1. Content #1. Content #1. Content #1. Content #1. Content #1.");
content1.setWrapText(true);
content2 = new TextArea("Content #2. Content #2. Content #2. Content #2. Content #2. Content #2. Content #2. Content #2. Content #2. Content #2. Content #2. Content #2. Content #2. Content #2. Content #2. Content #2. Content #2. Content #2. Content #2. Content #2. Content #2. Content #2. Content #2. Content #2. Content #2. Content #2. Content #2. Content #2. Content #2. Content #2.");
content2.setWrapText(true);
final Button toggleContent1 = new Button("Toggle content #1");
addToggleContentOnAction(toggleContent1, content1);
final Button toggleContent2 = new Button("Toggle content #2");
addToggleContentOnAction(toggleContent2, content2);
container.getChildren().addAll(new HBox(toggleContent1, toggleContent2), outerSplitPane);
stage.setScene(new Scene(container));
stage.show();
}
private void addToggleContentOnAction(Button button, Node node) {
button.setOnAction(e -> {
final ObservableList<Node> innerItems = innerSplitPane.getItems();
final ObservableList<Node> outerItems = outerSplitPane.getItems();
if (innerItems.contains(node)) {
innerItems.remove(node);
if(innerItems.isEmpty()) {
outerItems.remove(innerSplitPane);
}
} else {
if(!outerItems.contains(innerSplitPane)) {
outerItems.add(innerSplitPane);
}
innerItems.add(node);
}
final List<Node> ordering = asList(content1, content2);
FXCollections.sort(innerItems, (o1, o2) -> ordering.indexOf(o1) - ordering.indexOf(o2));
});
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment