Как получить элемент просмотра таблицы по ссылке гиперссылки - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть следующая проблема в табличном представлении javafx, мое табличное представление связано с определенной моделью, и нормальные операции CRUD работают без проблем, я также добавил столбец, который не связан с ЛЮБОЙ моделью данных, и он просто содержит гиперссылку на какой пользователь может щелкнуть, и ему предлагается всплывающее окно.

Вся эта работа, что она не работает, когда я нажимаю на гиперссылку, я также хочу передать значение строки, и обычно это работает как

tableview.getSelectionModel().getSelectedItem();

Но теперь это не работает, так как я не щелкаю непосредственно по ячейке, а щелкаю по гиперссылке, и если я щелкаю сначала по какой-то строке, а затем по гиперссылке, я получаю выделенную строку. Можно ли выбрать строку при нажатии гиперссылки, поэтому мне не нужно сначала щелкать строку, а затем гиперссылку в той же строке.

public class RemoveCell<T> extends TableCell<T, Void> {

    private final Hyperlink link;
    private final Hyperlink link1;
    private final HBox pane = new HBox();

    public RemoveCell() {
        link = new Hyperlink("Remove");
        link1 = new Hyperlink("Edit");
        pane.getChildren().addAll(link,link1);
        link1.setOnAction(evt -> {
            //lagerRet();
            if(tableView.getSelectionModel().getSelectedItem()!=null) {
                System.out.println("not null");
            }
            else {
                System.out.println("null");
            }
            // remove row item from tableview

           // ap.getChildren().removeAll();
            //ap.getChildren().setAll(mcon.loadParent(FxmlView.CHART));
            PopOver popsy = new PopOver();
            try {
                popsy.setContentNode(control.loadUni(FxmlView.POP));

            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            //popsy.setContentNode(panemain);
            popsy.headerAlwaysVisibleProperty().set(true);;
            popsy.show(link);


        });
        link.setOnAction(evt -> {
            // remove row item from tableview
            System.out.println("a quick test");
        });


    }

    @Override
    protected void updateItem(Void item, boolean empty) {
        super.updateItem(item, empty);

        setGraphic(empty ? null : pane );
        //setGraphic(empty ? null : link1 );


    }

}

и, наконец, так я заполняю колонку

testColumn.setCellFactory(tc -> new RemoveCell<>());

1 Ответ

0 голосов
/ 04 сентября 2018

Можно получить доступ к элементу строки через TableRow, содержащий TableCell.

T item = getTableRow().getItem();

Также возможно получить индекс в TableView.items, используя TableCell.getIndex, что позволяет удалять без поиска элемента в списке.

int itemIndex = getIndex();
getTableView().getItems().remove(itemIndex);
...