TabPane - initial select tab not working properly?
Daniel Peintner
daniel.peintner at gmail.com
Thu Aug 20 15:43:16 UTC 2020
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.rapte at 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.peintner at gmail.com>
> Sent: Wednesday, August 19, 2020 8:47 PM
> To: openjfx-dev at 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);
> }
>
> }
>
More information about the openjfx-dev
mailing list