import javafx.application.Application; import javafx.geometry.Side; import javafx.scene.control.Tab; import javafx.scene.control.TabPane; import javafx.scene.control.TextArea; import javafx.scene.control.TabPane.TabClosingPolicy; import javafx.scene.layout.BorderPane; import javafx.scene.layout.HBox; import javafx.scene.Scene; import javafx.stage.Stage; import java.io.IOException; import java.util.Calendar; import java.util.Locale; import java.util.Map; import java.util.TreeMap; public class TabTest extends Application { private final Calendar cal = Calendar.getInstance(); public static void main(String[] args) { launch(args); } @Override public void start(Stage primaryStage) throws IOException { HBox box = new HBox( createMonthTabs(), createDayTabs() ); TextArea text = new TextArea( "Selecting a tab causes it to scroll up !? Selecting from a different set resets the other." ); text.setWrapText( true ); BorderPane bp = new BorderPane( text ); bp.setLeft( box ); primaryStage.setTitle( getClass().getSimpleName() ); primaryStage.setScene( new Scene( bp, 200, 800 ) ); primaryStage.centerOnScreen(); primaryStage.show(); } private TabPane createMonthTabs() { Map mthMap; // Unordered TreeMap mthOrder = new TreeMap<>(); // Ordered mthMap = cal.getDisplayNames( Calendar.MONTH, Calendar.SHORT, Locale.getDefault() ); // Unordered months for ( Map.Entry mthEntry : mthMap.entrySet() ) { mthOrder.put( mthEntry.getValue(), mthEntry.getKey() ); // Ordered months } TabPane mthTabs = new TabPane(); for ( String mthName : mthOrder.values() ) { mthTabs.getTabs().add( new Tab( mthName ) ); // Populate tabs } mthTabs.getSelectionModel().select( cal.get( Calendar.MONTH ) ); mthTabs.setTabClosingPolicy( TabClosingPolicy.UNAVAILABLE ); mthTabs.setSide( Side.LEFT ); return mthTabs; } private TabPane createDayTabs() { TabPane dayTabs = new TabPane(); for ( int day = 1; day <= cal.getActualMaximum( Calendar.DAY_OF_MONTH ); day++ ) { dayTabs.getTabs().add( new Tab( "" + day ) ); } dayTabs.getSelectionModel().select( cal.get( Calendar.DAY_OF_MONTH ) - 1 ); dayTabs.setTabClosingPolicy( TabClosingPolicy.UNAVAILABLE ); dayTabs.setSide( Side.RIGHT ); return dayTabs; } }