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.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 MenuTabSwitch extends Application { MenuBar menuBar; TabPane tabPane; Menu menu1; MenuItem menu11; @Override public void start(Stage primaryStage) { menuBar = new MenuBar(); menu1 = new Menu("test "); menu11 = new MenuItem("test"); 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) { menuBar.getMenus().clear(); menu1.getItems().clear(); menu1.getItems().add(menu11); menuBar.getMenus().add(menu1); menu11.setVisible(false); menuBar.getMenus().clear(); menu1.getItems().clear(); menu1.getItems().add(menu11); menuBar.getMenus().add(menu1); } }); menuBar.setUseSystemMenuBar(true); primaryStage.setTitle("MenuTabSwitch"); 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); } }