java - 如何在JavaFx中删除TableRow

标签 java hibernate javafx tableview

如何向 TableView 行中的 JavaFx 按钮添加一些操作,以便在按下按钮时删除特定的 TableRow 和填充特定行的相应数据库表?

TableView 上的每一行都有自己的删除按钮。

这是我到目前为止所拥有的:

KiwiAction.setCellValueFactory(new PropertyValueFactory<NewBeautifulKiwi, Object>("KiwiAction"));
KiwiAction.setCellFactory(new Callback<TableColumn<NewBeautifulKiwi, Object>, TableCell<NewBeautifulKiwi, Object>>() {
    @Override
    public TableCell<NewBeautifulKiwi, Object> call(TableColumn<NewBeautifulKiwi, Object> param) {
        final Button button;
        Image image = new Image(getClass().getResourceAsStream("/MediaTools/Error.png"));
        final ImageView imageView = new ImageView();
        imageView.setFitHeight(16);
        imageView.setFitWidth(16);

        imageView.setImage(image);

        button = new Button("", imageView);
        final TableCell<NewBeautifulKiwi, Object> cell = new TableCell<NewBeautifulKiwi, Object>() {
            @Override
            public void updateItem(Object item, boolean empty) {
                if (item != null) {
                    super.updateItem(item, empty);

                    final VBox vbox = new VBox(0);

                    button.setAlignment(Pos.CENTER);
                    button.maxWidth(32);
                    button.getStyleClass().add("deleteButton");

                    final TableCell<NewBeautifulKiwi, Object> c = this;

                    button.setOnAction(new EventHandler<ActionEvent>() {
                        @Override
                        public void handle(ActionEvent event) {
                            TableRow tableRow = c.getTableRow();
                            NewBeautifulKiwi item = (NewBeautifulKiwi) tableRow.getTableView().getItems().get(tableRow.getIndex());

                            Session session = HibernateUtil.getSessionFactory().openSession();
                            session.beginTransaction();

                            NewBeautifulKiwi toDelete = (NewBeautifulKiwi) session.get(NewBeautifulKiwi.class, item);
                            session.delete(toDelete);
                            session.getTransaction().commit();
                            session.flush();
                            session.close();
                            System.out.println("Deleted");
                        }
                    });
                    vbox.getChildren().add(button);
                    setGraphic(vbox);
                }

            }
        };
        cell.setGraphic(button);
        return cell;
    }
});

Kiwi.setCellValueFactory(new PropertyValueFactory<NewBeautifulKiwi, String>("Kiwi"));

任何帮助将不胜感激。这两天一直在做这个。

最佳答案

最明显的方法是从 ObservableList 中删除该项目或清除 ObservableList 并重新填充它,然后再次将此列表分配给表!

这会成功的!

-干杯!

关于java - 如何在JavaFx中删除TableRow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22522995/

相关文章:

JavaFX 未启动

JavaFX、场景生成器 (IntelliJ) 程序从 StackOverFlow 抛出 java.lang.reflect.InitationTargetException

java - 我的JPA查询方法是否正确?

java - 谁能帮我写一个更新查询

spring - 将 PersistenceExceptionTranslationPostProcessor 与 Spring 的 JdbcTemplate 一起使用是否有意义?

java - 无法获取 LAZY - JPA

java - java中如何将一个对象转换为另一个对象? "javafx.scene.Group cannot be cast to javafx.scene.shape.Rectangle"

Java 线程池,如何使用 shutdownNow() 立即停止长时间运行的线程?

java - 多个输入文件的转换

java - 在 Spring Batch 中动态设置 gridSize(线程数)