我正在使用 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);
}
}
结果:
最佳答案
当前版本(JavaFX 版本 17)中的实现复制了 Label
和 ImageView
(因此它们可以同时出现在选项卡和选项卡菜单中)相当原始的方式。如果 Tab
的图形是 ImageView
,则会创建一个新的 ImageView
,并将其 ImageProperty
绑定(bind)到原始图像ImageView
的 imageProperty
。但是,不会复制其他属性,例如 fitWidth
和 fitHeight
。
因此,解决方法是调整 Image
而不是 ImageView
的大小。这意味着选项卡菜单使用的 ImageView
也将引用调整大小的 Image
,并且不需要 fitHeight
和 fitWidth
设置:
@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/