Hi Ambarish, all, Thank you for the feedback.
I did report the bug and got the internal review ID : 9066543 Thanks, -- Daniel On Wed, Aug 19, 2020 at 8:45 PM Ambarish Rapte <ambarish.ra...@oracle.com> wrote: > Hello Daniel, > > The behavior seems like a bug to me. > Looks like the first layout of TabHeader fails to bring the selected tab > header into view. > You can report it here https://bugs.java.com/bugdatabase/ > > Reason why it works with Platform.runLater(): > Wrapping the select() call inside a Platfrom.runLater() causes it to run > after the stage is shown i.e. after the first layout is performed. > It can be confirmed, by wrapping a call to > System.out.println(stage.isShowing()); along with select() call OR by > wrapping the select() call inside stage.setOnShown(); instead of > Platform.runLater(). > > Regards, > Ambarish > > -----Original Message----- > From: Daniel Peintner <daniel.peint...@gmail.com> > Sent: Wednesday, August 19, 2020 8:47 PM > To: openjfx-dev@openjdk.java.net > Subject: TabPane - initial select tab not working properly? > > All, > > I just stumbled over a problem which I think is a bug in JavaFX. > > In a program I create several tabs and initialize a selected tab upfront. > The 'select' command works fine for the tab pane content but unfortunately > not for the header that shows the current active tab (somehow the tab > header does not move to the set index). > > Note1: Only happens for indices outside the visible range > Note2: wrapping the 'select' command in Platform.runLater() works as > expected > > Please find below a simple example to reproduce the issue. > Do you consider this behavior being a bug? > > I see the problem for JavaFX 8 but also for 15-ea. > > Thanks for any insight, > > -- Daniel > > > =========== > > import javafx.application.Application; > import javafx.scene.Scene; > import javafx.scene.control.Label; > import javafx.scene.control.Tab; > import javafx.scene.control.TabPane; > import javafx.stage.Stage; > > public class TestManyTabs extends Application { > > @Override > public void start(Stage stage) { > TabPane tabPane = new TabPane(); > > for (int i = 0; i < 30; i++) { > Tab tab = new Tab("Tab " + i); > tab.setContent(new Label("Content for " + i)); > tabPane.getTabs().add(tab); > } > > // set initial tab *outside* the visible range > // Issue: tab header does *not* switch properly > // Note: wrapping the following select statement in > Platform.runLater() works as expected > // Platform.runLater(() -> { > tabPane.getSelectionModel().select(25); > // }); > > Scene scene = new Scene(tabPane, 600, 400); > stage.setScene(scene); > > stage.show(); > } > > public static void main(String[] args) { > Application.launch(TestManyTabs.class, args); > } > > } >