javafx - JavaFX 选项卡 Pane 下拉列表中不考虑 ImageView 大小

标签 javafx

我正在使用 JavaFX TabPane,并为我的一个选项卡设置了图像。实际图像比需要的大,因此我使用 ImageView.setFitHeight(int)ImageView.setFitWidth(int) 来更改图像大小。

选项卡标签本身看起来不错,但是当我添加太多选项卡并添加选项卡下拉列表时,下拉列表中的大小将以原始图像大小显示。关于如何更改下拉列表中的图像大小有什么想法吗?

最小可重现示例:

public class TabGraphicsIssueDemo extends Application {

    private static final int TAB_IMAGE_SIZE = 15;
    
    @Override
    public void start(Stage primaryStage) throws Exception {
        
        TabPane pane = new TabPane();
        
        ImageView image = new ImageView(new Image(new FileInputStream("smile.jpg")));
        image.setFitHeight(TAB_IMAGE_SIZE);
        image.setFitWidth(TAB_IMAGE_SIZE);
        
        Tab imageTab = new Tab();
        imageTab.setGraphic(image);
        pane.getTabs().add(imageTab);
        
        for(int i = 0; i < 10; i++) {
            pane.getTabs().add(new Tab("Tab " + i));
        }
        
        
        primaryStage.setScene(new Scene(pane, 300, 300));
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
    
}

结果:

enter image description here

最佳答案

当前版本(JavaFX 版本 17)中的实现复制了 LabelImageView(因此它们可以同时出现在选项卡和选项卡菜单中)相当原始的方式。如果 Tab 的图形是 ImageView,则会创建一个新的 ImageView,并将其 ImageProperty 绑定(bind)到原始图像ImageViewimageProperty。但是,不会复制其他属性,例如 fitWidthfitHeight

因此,解决方法是调整 Image 而不是 ImageView 的大小。这意味着选项卡菜单使用的 ImageView 也将引用调整大小的 Image ,并且不需要 fitHeightfitWidth设置:

    @Override
    public void start(Stage primaryStage) throws Exception {

        TabPane pane = new TabPane();

        ImageView image = new ImageView(new Image(new FileInputStream("smile.jpg"),
                                      TAB_IMAGE_SIZE, TAB_IMAGE_SIZE, true, true));

//        image.setFitHeight(TAB_IMAGE_SIZE);
//        image.setFitWidth(TAB_IMAGE_SIZE);


        Tab imageTab = new Tab();
        imageTab.setGraphic(image);
        pane.getTabs().add(imageTab);

        for(int i = 0; i < 10; i++) {
            pane.getTabs().add(new Tab("Tab " + i));
        }


        primaryStage.setScene(new Scene(pane, 300, 300));
        primaryStage.show();
    }

关于javafx - JavaFX 选项卡 Pane 下拉列表中不考虑 ImageView 大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71255826/

相关文章:

javafx - 单击菜单项时如何执行操作?

JavaFX:如何不在 ScrollingPane 中的标签的圆形边框之外填充背景

java - 如何使 GridPane 中的所有单元格可见且大小相同?

java - 将项目添加到数据库中

JavaFX - 手动将图像添加到 GridPane

JavaFX VGrow TabPane 内容更改

java - 如何从 Java Swing/GUI 调用 JavaFXApplication?这可能吗?

java - 在 Ubuntu 上运行 JavaFX jar

Java ListChangeListener WasUpdated() 不起作用

javaFX:使用translatetransition移动具有绝对坐标的形状