1
テーブルの作成後にネストされた列を動的に追加すると、nested column headersはレンダリングされません。ここで問題を再現するコードです。私はJDK 1.8.0_121を使用していますJava FX動的に追加されたネストされた列ヘッダーはレンダリングされません
しかし、ネストした列をインラインで追加すると、すべてが期待通りに表示されます。
package hellofx;
import javafx.application.*;
import javafx.application.*;
import javafx.geometry.*;
import javafx.scene.*;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.scene.text.*;
import javafx.stage.*;
public class TableViewSample extends Application {
private TreeTableView table = new TreeTableView();
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage stage) {
Scene scene = new Scene(new Group());
stage.setTitle("Table View Sample");
stage.setWidth(600);
stage.setHeight(500);
final Label label = new Label("Address Book");
label.setFont(new Font("Arial", 20));
table.setEditable(true);
TreeTableColumn firstNameCol = new TreeTableColumn("First Name");
TreeTableColumn lastNameCol = new TreeTableColumn("Last Name");
TreeTableColumn emailCol = new TreeTableColumn("Email");
//Simulate adding nested columns after stage is set.
Platform.runLater(() -> {
TreeTableColumn firstEmailCol = new TreeTableColumn("Primary");
TreeTableColumn secondEmailCol = new TreeTableColumn("Secondary");
emailCol.getColumns().addAll(firstEmailCol, secondEmailCol);
});
table.getColumns().addAll(firstNameCol, lastNameCol, emailCol);
final VBox vbox = new VBox();
vbox.setSpacing(5);
vbox.setPadding(new Insets(10, 0, 0, 10));
vbox.getChildren().addAll(label, table);
((Group) scene.getRoot()).getChildren().addAll(vbox);
stage.setScene(scene);
stage.show();
}
}
「スリープ(100)」は、あなたが思っていることをしません。イベントが発生するのを待つことはありません。むしろ、イベントが処理されるのを一時的に防止します。あなたの目標が、ステージが表示された後に何かを起こすことであるならば、 'stage.setOnShown'を使います。 – VGR
@VGRもちろん、正しいです。しかし、代わりに遅延を作成するために 'PauseTransition'を使用してOPのコードをテストしましたが、その方法でも動作しません。テーブルヘッダーが高さを再計算できないか、何らかの形でレイアウトに失敗するように見えます。 –
ネストされた列の数は、表のレンダリング時にはわかりません。入力されるフィードによって、列が変更されます。その遅れはデモンストレーションの目的に過ぎない。このコードを実行させるのは現実世界のイベントになります。 –