【发布时间】:2017-12-03 07:25:01
【问题描述】:
我注意到在TabPane 中添加和删除选项卡时,它无法匹配底层列表中选项卡顺序的位置。这只发生在至少一个选项卡由于父项的宽度而完全隐藏时。这是一些复制问题的代码:
public class TabPaneTester extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
Scene scene = sizeScene();
primaryStage.setMinHeight(200);
primaryStage.setWidth(475);
primaryStage.setScene(scene);
primaryStage.show();
}
private Scene sizeScene(){
TabPane tabPane = new TabPane();
tabPane.setTabMinWidth(200);
tabPane.getTabs().addAll(newTabs(3));
Scene scene = new Scene(tabPane);
scene.setOnKeyPressed(e -> tabPane.getTabs().add(1, tabPane.getTabs().remove(0)));
return scene;
}
private static Tab[] newTabs(int numTabs){
Tab[] tabs = new Tab[numTabs];
for(int i = 0; i < numTabs; i++) {
Label label = new Label("Tab Number " + (i + 1));
Tab tab = new Tab();
tab.setGraphic(label);
tabs[i] = tab;
}
return tabs;
}
public static void main(String[] args) {
launch();
}
}
当您按下一个键时,它会删除第一个选项卡(在索引 0 处)并将其放回索引 1,从而有效地交换前两个选项卡。但是,在运行时选项卡实际上并没有在视觉上交换(即使选项卡切换器菜单确实切换了它们的位置)。
如果您更改屏幕宽度以包含隐藏的第三个选项卡的像素(将 475 替换为 500),则它会按预期工作。有关如何解决此问题的任何线索?
【问题讨论】:
-
我认为你发现了一个错误。如果您在
.add(2, yourTab)中使用 2,您将看到新的Tab的位置比它应该在的位置少一。 -
您能解释一下这是如何导致这种行为的吗?我看不到所选选项卡如何影响它们的位置,因为无论哪种方式都应该删除第一个选项卡并更新列表,导致选项卡 2 显示(并选择)在前面,然后选项卡 1 放在它后面。此外,如果宽度无关紧要,它如何改变行为?编辑:是的错误...
-
这一定是一个错误。如果在再次添加后打印选项卡的实际位置,它将显示与实际视觉位置不同的位置。现在,如果您在关键事件结束时调用
tabPane.autosize();,它将修复位置。 -
似乎在 fx9 中工作
-
@kleopatra
TabPaneSkin是否改变了它的异步行为?
标签: java javafx tabs javafx-2 tabpanel