JavaFx: инициализация TableViewSkin - PullRequest
0 голосов
/ 28 августа 2018

Я реализую пользовательские TableView элементы, такие как custom ContextMenu, как tableMenu. Для этого мне нужно получить экземпляр TableHeaderRow, но у меня возникли проблемы. В методе initialize() TableView#getSkin() равен нулю. Но мне интересно, почему? Когда инициализируется Skin? Чтобы получить временное решение, я использую Platform.runLater(), но оно работает не каждый раз, как ожидалось. Как я помню @kleopatra, упомянутый в комментарии, вы не можете быть уверены, что runLater() будет выполнено в ожидаемое время.

Это иногда приводит к тому, что пользовательское ContextMenu отображается неправильно.

Вот так выглядит мой Controller класс:

public class Controller implements Initializable {

    @FXML
    private TableView<?> tableView;

    @Override
    public void initialize(URL location, ResourceBundle resources) {

        // null
        System.out.println(tableView.getSkin());

        // most of the time not null. but it happens to be null
        Platform.runLater(() -> System.out.println(tableView.getSkin()));

        // here getTableHeader returns null
        applyCustomTableMenu(getTableHeader(tableView));

        // here getTableHeader sometimes returns the nonnull reference
        Platform.runLater(() -> applyCustomTableMenu(getTableHeader(tableView)));
    }

    private TableHeaderRow getTableHeader(TableView<?> tableView) {
        return (TableHeaderRow) tableView.queryAccessibleAttribute(AccessibleAttribute.HEADER);
    }

    private void applyCustomTableMenu(TableHeaderRow tableHeaderRow) {
        // implementation
        System.out.println(tableHeaderRow);
    }

}

Где находится точка, когда я могу быть уверен, что скин инициализирован, и я могу получить ненулевую ссылку на мой TableHeaderRow?

Я бы также принял любое предложение, которое предоставляло бы мне каждый раз ненулевую ссылку на мой TableHeaderRow.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...