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;
}
}