import javafx.application.Application; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.scene.Scene; import javafx.scene.control.Label; import javafx.scene.control.Menu; import javafx.scene.control.MenuBar; import javafx.scene.control.MenuItem; import javafx.scene.control.SeparatorMenuItem; import javafx.scene.control.Tab; import javafx.scene.control.TabPane; import javafx.scene.layout.BorderPane; import javafx.stage.Stage; /** * * To show the bug, switch from tab to tab. */ public class MacMenuSwitchCrash extends Application { MenuBar menuBar; TabPane tabPane; Menu display; MenuItem rowIndexItem; private final SeparatorMenuItem displaySeparator = new SeparatorMenuItem(); MenuItem item; @Override public void start(Stage primaryStage) { menuBar = new MenuBar(); display = new Menu("test "); rowIndexItem = new MenuItem("test"); item = new MenuItem("test"); menuBar.getMenus().add(display); constructTabPane(); BorderPane pane = new BorderPane(); pane.setTop(menuBar); pane.setCenter(tabPane); Scene scene = new Scene(pane, 300, 250); tabPane.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener() { @Override public void changed(ObservableValue observable, Number oldValue, Number newValue) { display.getItems().setAll(rowIndexItem, new MenuItem()); display.getItems().setAll(rowIndexItem, new MenuItem()); display.getItems().removeAll(rowIndexItem, displaySeparator); display.getItems().add(0, rowIndexItem); display.getItems().add(1, displaySeparator); display.getItems().removeAll(rowIndexItem, displaySeparator); display.getItems().add(0, rowIndexItem); display.getItems().add(1, displaySeparator); display.getItems().setAll(item); } }); menuBar.setUseSystemMenuBar(true); primaryStage.setTitle("Hello World!"); primaryStage.setScene(scene); primaryStage.show(); } private void constructTabPane() { tabPane = new TabPane(); for (int j = 0; j < 2; ++j) { Tab tab = new Tab("tab " + j); BorderPane pane = new BorderPane(); Label label = new Label("test"); pane.setCenter(label); tab.setContent(pane); tabPane.getTabs().add(tab); } } /** * @param args the command line arguments */ public static void main(String[] args) { launch(args); } }