当前位置:   article > 正文

JavaFx之TableView表格添加按钮删除行(二十二)_javafx tableview添加按钮

javafx tableview添加按钮

JavaFx之TableView表格添加按钮删除行(二十二)

JavaFx之TableView添加按钮
JavaFx之TableView删除行

编写一个xml

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.TableColumn?>
<?import javafx.scene.control.TableView?>
<?import javafx.scene.layout.VBox?>


<VBox maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0"
      fx:controller="top.oneit.jdownload.controller.component.DownloadingTabController"
      prefWidth="900.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1">
    <children>
        <TableView fx:id="downloadingTableView">
            <columns>
                <TableColumn prefWidth="421.0" text="标题" fx:id="title"/>
                <TableColumn minWidth="0.0" prefWidth="97.0" fx:id="size" text="大小"/>
                <TableColumn prefWidth="96.0" fx:id="surplus" text="剩余"/>
                <TableColumn prefWidth="107.0" fx:id="speed" text="速度"/>
                <TableColumn prefWidth="177.0" fx:id="caozuo" text="操作"/>
            </columns>
        </TableView>
    </children>
</VBox>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

controller

import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import top.oneit.jdownload.controller.BaseInitializable;
import top.oneit.jdownload.po.DownloadingTablePo;

import java.net.URL;
import java.util.ResourceBundle;

public class DownloadingTabController extends Initializable {
    @FXML
    private TableView downloadingTableView;
    @FXML
    private TableColumn title, size, surplus, speed, caozuo;


    @Override
    public void initialize(URL location, ResourceBundle resources) {
        initTableColumn();
        Button button = new Button("删除");
        Button button1 = new Button("删除");
        ObservableList<DownloadingTablePo> data =
                FXCollections.observableArrayList(
                        new DownloadingTablePo(0, "Jacob", "Smith", "Smith", "Smith", button),
                        new DownloadingTablePo(1, "Jacob", "Smith", "Smith", "Smith", button1)
                );

        // 对data操作即对表格操作,会同步更新的
        button.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent event) {
                data.remove(0);// 删除第一列
            }
        });

        button1.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent event) {
                DownloadingTablePo del=null;
                for (DownloadingTablePo po : data) {
                    if (po.getCaozuo() == button1) {
                        del=po;
                        break;
                    }
                }
                if (del!=null){
                    data.remove(del);
                }
            }
        });
        downloadingTableView.setItems(data);

    }

    private void initTableColumn() {
        title.setCellValueFactory(new PropertyValueFactory<>("title"));
        size.setCellValueFactory(new PropertyValueFactory<>("size"));
        surplus.setCellValueFactory(new PropertyValueFactory<>("surplus"));
        speed.setCellValueFactory(new PropertyValueFactory<>("speed"));
        caozuo.setCellValueFactory(new PropertyValueFactory<>("caozuo"));
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68

行实体:

import javafx.scene.control.Button;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
@AllArgsConstructor
public class DownloadingTablePo {
    private int id;
    private String title;
    private String size;
    private String surplus;
    private String speed;
    private Button caozuo;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

编写一个启动类

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import top.oneit.jdownload.utils.XmlUtils;

public class DownloadingTab extends Application {
    @Override
    public void start(Stage primaryStage) throws Exception {
        VBox vBox = XmlUtils.loadXML("/fxml/item/dowmloading-tab.fxml");
        primaryStage.setScene(new Scene(vBox));
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
import cn.hutool.core.lang.Assert;
import javafx.fxml.FXMLLoader;

import java.net.URL;

public class XmlUtils<T> {

    public static <T> T loadXML(String path) {
        URL resource = XmlUtils.class.getResource(path);
        FXMLLoader fxmlLoader = new FXMLLoader(resource);
        try {
            return fxmlLoader.load();
        } catch (Exception e) {
            e.printStackTrace();
            Assert.isNull(e, "加载xml失败!");
        }
        return null;
    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

效果:
在这里插入图片描述点击删除
在这里插入图片描述

刷新第一行第一列

controllerinitialize中添加一个右键选择事件来触发,你也可以添加按钮实现:

		// 优先选择行时触发事件
        downloadingTableView.setOnContextMenuRequested(new EventHandler<ContextMenuEvent>() {
            @Override
            public void handle(ContextMenuEvent event) {
                data.get(0).setTitle("1111");//更新第一列的title
                downloadingTableView.refresh();//刷新表格
            }
        });
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

在这里插入图片描述
右键选择一行时:
在这里插入图片描述
可以看到第一行第一列值已经改变
很明显可以看出,执行了全表刷新,这是消耗性能为代价。因此,应该把title的类型改为Label
那么你只需要执行setText不用全表刷新内容!

// 优先选择行时触发事件
downloadingTableView.setOnContextMenuRequested(new EventHandler<ContextMenuEvent>() {
    @Override
    public void handle(ContextMenuEvent event) {
        // title 的类型为 Label
        data.get(0).getTitle().setText("1111");//更新第一列的title
        //downloadingTableView.refresh();//刷新表格
    }
});
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/191613
推荐阅读
相关标签
  

闽ICP备14008679号