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>
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"));
    }
}
行实体:
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;
}
编写一个启动类
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);
    }
}
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;
    }
}
效果:
  点击删除
点击删除
 
刷新第一行第一列
在controller的initialize中添加一个右键选择事件来触发,你也可以添加按钮实现:
		// 优先选择行时触发事件
        downloadingTableView.setOnContextMenuRequested(new EventHandler<ContextMenuEvent>() {
            @Override
            public void handle(ContextMenuEvent event) {
                data.get(0).setTitle("1111");//更新第一列的title
                downloadingTableView.refresh();//刷新表格
            }
        });

 右键选择一行时:
 
 可以看到第一行第一列值已经改变
 很明显可以看出,执行了全表刷新,这是消耗性能为代价。因此,应该把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();//刷新表格
    }
});
JavaFx之TableView表格添加按钮删除行(二十二)的更多相关文章
- bootstrap表格添加按钮、模态框实现
		bootstrap表格添加按钮.模态框实现 原创 2017年07月20日 17:35:48 标签: bootstrap 1723 bootstrap表格添加按钮.模态框实现 - 需求: 需要表格后面每 ... 
- iOS 11开发教程(二十二)iOS11应用视图实现按钮的响应(2)
		iOS 11开发教程(二十二)iOS11应用视图实现按钮的响应(2) 此时,当用户轻拍按钮后,一个叫tapButton()的方法就会被触发. 注意:以上这一种方式是动作声明和关联一起进行的,还有一种先 ... 
- Bootstrap <基础二十二>超大屏幕(Jumbotron)
		Bootstrap 支持的另一个特性,超大屏幕(Jumbotron).顾名思义该组件可以增加标题的大小,并为登陆页面内容添加更多的外边距(margin).使用超大屏幕(Jumbotron)的步骤如下: ... 
- Senparc.Weixin.MP SDK 微信公众平台开发教程(二十二):如何安装 Nuget(dll) 后使用项目源代码调试
		最近碰到开发者问:我使用 nuget 安装了 Senparc.Weixin SDK,但是有一些已经封装好的过程想要调试,我又不想直接附加源代码项目,这样就没有办法同步更新了,我应该怎么办? 这其实是一 ... 
- Web 前端开发精华文章推荐(HTML5、CSS3、jQuery)【系列二十二】
		<Web 前端开发精华文章推荐>2014年第一期(总第二十二期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML ... 
- VMware vSphere 服务器虚拟化之二十二桌面虚拟化之创建View Composer链接克隆的虚拟桌面池
		VMware vSphere 服务器虚拟化之二十二桌面虚拟化之创建View Composer链接克隆的虚拟桌面池 在上一节我们创建了完整克隆的自动专有桌面池,在创建过程比较缓慢,这次我们将学习创建Vi ... 
- Bootstrap入门(二十二)组件16:列表组
		Bootstrap入门(二十二)组件16:列表组 列表组是灵活又强大的组件,不仅能用于显示一组简单的元素,还能用于复杂的定制的内容. 1.默认样式列表组 2.加入徽章 3.链接 4.禁用的列表组 5. ... 
- JAVA之旅(二十二)——Map概述,子类对象特点,共性方法,keySet,entrySet,Map小练习
		JAVA之旅(二十二)--Map概述,子类对象特点,共性方法,keySet,entrySet,Map小练习 继续坚持下去吧,各位骚年们! 事实上,我们的数据结构,只剩下这个Map的知识点了,平时开发中 ... 
- 二十二. Python基础(22)--继承
		二十二. Python基础(22)--继承 ● 知识框架 ● 继承关系中self的指向 当一个对象调用一个方法时,这个方法的self形参会指向这个对象 class A: def get(s ... 
- JAVA基础知识总结:一到二十二全部总结
		>一: 一.软件开发的常识 1.什么是软件? 一系列按照特定顺序组织起来的计算机数据或者指令 常见的软件: 系统软件:Windows\Mac OS \Linux 应用软件:QQ,一系列的播放器( ... 
随机推荐
- Blackmail
			Blackmail Arthur Hailey The chief house officer, Ogilvie, who had declared he would appear at the Cr ... 
- HCTF 2023 wp
			HCTF 2023 wp 一.Misc 1.玩原神玩的 分析:附件为一张图片 观察最后一行,明显有flag的格式 搜索得知是 对照得flag为:hctf{yuanlainiyewanyuanshenh ... 
- 手动添加winform的combobox和listbox名称和值
			先定义一个ListItem类,工程内其他窗体都可以用的. public class ListItem : Object { public string Text { get; ... 
- CentOS7 Ceph分布式集群部署
			CentOS 7 下安装Ceph-nautilus 本问主要记录在CentOS 7下如何安装Ceph-nautilus,安装过程中遇到的一些问题及解决方法. 1.Ceph实验准备 以下是本次实验所用到 ... 
- 树莓派4b部署samba服务实现文件共享
			注意 samba 生命力很旺盛,软件是在不断更新的, 网上很多针对 samba 网速优化设置截止当前 实测发现有很多已经过期, 甚至有些设置会适得其反,使传输速度更低. 例如, 全网都在配置的参数,& ... 
- Util应用框架基础(六) - 日志记录(三) - 写入 Seq
			本文是Util应用框架日志记录的第三篇,介绍安装和写入 Seq 日志系统的配置方法. 安装 Seq Seq是一个日志管理系统,对结构化日志数据拥有强大的模糊搜索能力. Util应用框架目前主要使用 S ... 
- 万字解析XML配置映射为BeanDefinition的源码
			本文分享自华为云社区<Spring高手之路16--解析XML配置映射为BeanDefinition的源码>,作者:砖业洋__. 1. BeanDefinition阶段的分析 Spring框 ... 
- Android 的异步消息处理机制
			前言 Android中的异步消息处理机制主要有四部分:Message.Handler.MessageQuene.Looper.这一消息处理机制也称为Handler机制.Handler机制是支撑整个An ... 
- 本地Stackedit Markdown编辑器设置远程访问
			StackEdit是一个受欢迎的Markdown编辑器,在GitHub上拥有20.7k Star!,它支持将Markdown笔记保存到多个仓库,包括Gitee.GitHub和Gitea.此在线笔记工具 ... 
- Modbus转Profinet 网关 TS-180
			产品简介 实现 PROFINET 网络与串口网络之间的数据通信,三个串口可分别连接具有 RS232 或 RS485 接口的设 备到 PROFINET 网络.即将串口设备转换为 PROFINET 设备. ... 
