JavaFX TabPane hat ein sehr seltsames Verhalten, wenn Sie versuchen, die Registerkarten zu sortieren, wenn nicht genügend Platz vorhanden ist, um alle Registerkarten anzuzeigen.JavaFX TabPane Sortierregister erstellt Chaos
Genauer gesagt, die Registerkarte Auswahl-Schaltfläche (runde Schaltfläche mit einem nach unten weisenden Pfeil auf der rechten Seite des Registerkartenkopfs), die eine Dropdown-Liste mit allen Registerkarten zeigen sollte zeigt nichts.
Ich habe einen kleinen Test erstellt, um das Problem zu reproduzieren. Klicken Sie einfach mehrere Male (bis nicht genug Platz für alle Registerkarten vorhanden ist) auf "Add new tab & sort" (oder mehrmals auf "Add new tab" und dann "Sort tabs"), und klicken Sie dann auf die Registerkarte Auswahl in der oberen rechten Ecke ... Nur um zu sehen, dass es überhaupt nichts zeigt!
Beachten Sie, dass die Größe des Fensters alle Registerkarten, um fit zu machen, und dann ist es wieder Ändern der Größe, so dass die Registerkarte Auswahltaste erneut angezeigt wird, das Problem löst.
Hier ist der Code zu reproduzieren. Ich benutze jdk1.8.0_92. Sieht wie ein JDK-Fehler aus?
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();
}
}
Haben Sie eine andere JDK-Version verwendet, um dies zu reproduzieren? – Supahupe
Ich habe überprüft - der Code in 'TabPaneSkin's' removeTabs' (siehe meine Antwort unten) ist immer noch ab heute auf dem Java 9-Zweig vorhanden, also ist der Fehler wahrscheinlich immer noch da. Ich habe die vorherigen Versionen nicht überprüft, aber bis vor kurzem funktionierte die Sortierung von Tabs aufgrund dieses Fehlers (behoben im Jahr 2015) überhaupt nicht: http://bugs.java.com/bugdatabase/view_bug.do?bug_id= 8118423 – Denis
Danke für die Information. Das ist sehr interessant – Supahupe