gpt4 book ai didi

JavaFX TabPane 排序选项卡造成严重破坏

转载 作者:行者123 更新时间:2023-11-29 06:54:28 28 4
gpt4 key购买 nike

如果您在没有足够空间显示所有选项卡时尝试对选项卡进行排序,JavaFX TabPane 会出现非常奇怪的行为。

更准确地说,应该显示包含所有选项卡的下拉列表的选项卡选择按钮(选项卡 Pane 标题右侧带有向下箭头的圆形按钮)不显示任何内容 .

我创建了一个小测试来重现该问题。只需在“添加新选项卡并排序”(或在“添加新选项卡”然后“排序选项卡”上多次)单击几次(直到没有足够的空间容纳所有选项卡),然后单击选项卡选择按钮在右上角...只是看到它什么也没显示!

enter image description here

请注意,调整窗口大小使所有选项卡适合,然后重新调整大小以便选项卡选择按钮再次出现,问题就解决了。

这是要重现的代码。我正在使用 jdk1.8.0_92。看起来像是 JDK 错误?

public class TabPaneTest extends Application {

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

int i = 1;

@Override
public void start(Stage primaryStage) throws Exception {
TabPane tabPane = new TabPane();

tabPane.getTabs().add(new Tab("My beautiful tab " + i, new TextArea("pane " + (i++))));

Button add = new Button("Add new tab");
add.setOnAction(event -> {
tabPane.getTabs().add(new Tab("My beautiful tab " + i, new TextArea("pane " + (i++))));
});

Button addSort = new Button("Add new tab & sort");
addSort.setOnAction(event -> {
tabPane.getTabs().add(new Tab("My beautiful tab " + i, new TextArea("pane " + (i++))));
tabPane.getTabs().sort((o1, o2) -> o2.getText().compareTo(o1.getText()));
});
Button sort = new Button("Sort tabs");
sort.setOnAction(event -> {
tabPane.getTabs().sort((o1, o2) -> o2.getText().compareTo(o1.getText()));
});


VBox vbox = new VBox(tabPane, new HBox(add, addSort, sort));

primaryStage.setScene(new Scene(vbox));
primaryStage.setWidth(400);
primaryStage.setHeight(300);
primaryStage.show();
}
}

最佳答案

Tab列表的TabPaneSkin中有一个ListChangeListener,但是正如您已经提到的那样,它无法对列表进行排序.

作为解决方法,您可以将选项卡放在新列表中,并在排序后将其应用于 TabPane:

 List<Tab> tabs = new ArrayList(tabPane.getTabs());
tabs.sort((o1, o2) -> o2.getText().compareTo(o1.getText()));
tabPane.getTabs().clear();
tabPane.getTabs().setAll(tabs);

关于JavaFX TabPane 排序选项卡造成严重破坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37328760/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com