public TabPane(ApplicationPane appPane) { this.appPane = appPane; getStylesheets().add(Mercury.class.getResource("/res/css/TabPane.css").toExternalForm()); setMinWidth(200); setMaxWidth(200); final TabButtonPane buttonPane = new TabButtonPane(); final VBox tabListBox = new VBox(); tabListBox.getStyleClass().add("dark-pane"); tabListBox.setId("tab-list"); setVgrow(tabListBox, Priority.ALWAYS); tabList = new ListView<>(); setVgrow(tabList, Priority.ALWAYS); selectionModel = tabList.getSelectionModel(); selectionModel .selectedIndexProperty() .addListener( new ChangeListener<Number>() { @Override public void changed( ObservableValue<? extends Number> observableValue, Number number, Number number2) { if (number2 == 0) { tabList.getStyleClass().add("first"); } else { tabList.getStyleClass().remove("first"); } } }); selectionModel.selectedItemProperty().addListener(new TabClickedListener()); tabList.setCellFactory( new Callback<ListView<Tab>, ListCell<Tab>>() { public ListCell<Tab> call(ListView<Tab> tabListView) { return new TabCell(); } }); tabListBox.getChildren().add(tabList); getChildren().addAll(buttonPane, tabListBox); }