JavaFX TabPaneは、すべてのタブを表示するのに十分なスペースがないときにタブを並べ替えると非常に奇妙な動作をします。JavaFX TabPane並べ替えタブで盛り上がりが発生する
さらに正確には、すべてのタブのドロップダウンリストを表示するタブ選択ボタン(タブペインのヘッダーの右側にある下向き矢印の丸いボタン)は、を何も表示しません。
私は問題を再現するための小さなテストを作成しました。 「Add new tab & sort」(または「新しいタブの追加」と「タブの並べ替え」を複数回実行)を数回クリックするだけで(すべてのタブに十分なスペースがなくなるまで)、タブ選択ボタンをクリックするだけです右上隅に...それは全く何も表示されていないことを見て!
すべてのタブがフィット感にするために、ウィンドウのサイズを変更して、タブの選択ボタンが再び表示されるように戻ってそれをリサイズすることを注記は、問題を解決します。
ここにコードを再現します。私は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();
}
}
これを再現するには別のJDKバージョンを使いましたか? – Supahupe
私はチェックしました。 'TabPaneSkin'の' removeTabs'(以下の私の答えを参照してください)に関係するコードは、今日のJava 9ブランチにはまだ存在しているので、まだバグが残っている可能性があります。私は以前のバージョンをチェックしなかったが、明らかに最近まで、このバグ(2015年に修正された)のためにタブのソートがまったく機能しなかった:http://bugs.java.com/bugdatabase/view_bug.do?bug_id= 8118423 – Denis
情報ありがとうございます。これは非常に興味深いです – Supahupe