这可以通过直接访问 TableView 的内部结构来完成,我不知道有任何官方 API 可以做到这一点。
官方的 TableView CSS命名了一个类,column-header-background然后我们可以通过Node#lookup()方法访问该类。
一个例子
public class ContextMenuOnTableHeader extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
TableView<String> table = new TableView<>();
Scene scene = new Scene(table);
primaryStage.setScene(scene);
primaryStage.setWidth(200);
primaryStage.setHeight(200);
primaryStage.show();
Node header = table.lookup(".column-header-background");
header.setOnContextMenuRequested(event -> {
ContextMenu menu = new ContextMenu();
menu.getItems().add(new MenuItem("Mr Horse"));
menu.show(header, event.getScreenX(), event.getScreenY());
});
}
}
Run Code Online (Sandbox Code Playgroud)