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表格添加按钮删除行(二十二)的更多相关文章

  1. bootstrap表格添加按钮、模态框实现

    bootstrap表格添加按钮.模态框实现 原创 2017年07月20日 17:35:48 标签: bootstrap 1723 bootstrap表格添加按钮.模态框实现 - 需求: 需要表格后面每 ...

  2. iOS 11开发教程(二十二)iOS11应用视图实现按钮的响应(2)

    iOS 11开发教程(二十二)iOS11应用视图实现按钮的响应(2) 此时,当用户轻拍按钮后,一个叫tapButton()的方法就会被触发. 注意:以上这一种方式是动作声明和关联一起进行的,还有一种先 ...

  3. Bootstrap <基础二十二>超大屏幕(Jumbotron)

    Bootstrap 支持的另一个特性,超大屏幕(Jumbotron).顾名思义该组件可以增加标题的大小,并为登陆页面内容添加更多的外边距(margin).使用超大屏幕(Jumbotron)的步骤如下: ...

  4. Senparc.Weixin.MP SDK 微信公众平台开发教程(二十二):如何安装 Nuget(dll) 后使用项目源代码调试

    最近碰到开发者问:我使用 nuget 安装了 Senparc.Weixin SDK,但是有一些已经封装好的过程想要调试,我又不想直接附加源代码项目,这样就没有办法同步更新了,我应该怎么办? 这其实是一 ...

  5. Web 前端开发精华文章推荐(HTML5、CSS3、jQuery)【系列二十二】

    <Web 前端开发精华文章推荐>2014年第一期(总第二十二期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML ...

  6. VMware vSphere 服务器虚拟化之二十二桌面虚拟化之创建View Composer链接克隆的虚拟桌面池

    VMware vSphere 服务器虚拟化之二十二桌面虚拟化之创建View Composer链接克隆的虚拟桌面池 在上一节我们创建了完整克隆的自动专有桌面池,在创建过程比较缓慢,这次我们将学习创建Vi ...

  7. Bootstrap入门(二十二)组件16:列表组

    Bootstrap入门(二十二)组件16:列表组 列表组是灵活又强大的组件,不仅能用于显示一组简单的元素,还能用于复杂的定制的内容. 1.默认样式列表组 2.加入徽章 3.链接 4.禁用的列表组 5. ...

  8. JAVA之旅(二十二)——Map概述,子类对象特点,共性方法,keySet,entrySet,Map小练习

    JAVA之旅(二十二)--Map概述,子类对象特点,共性方法,keySet,entrySet,Map小练习 继续坚持下去吧,各位骚年们! 事实上,我们的数据结构,只剩下这个Map的知识点了,平时开发中 ...

  9. 二十二. Python基础(22)--继承

    二十二. Python基础(22)--继承 ● 知识框架   ● 继承关系中self的指向 当一个对象调用一个方法时,这个方法的self形参会指向这个对象 class A:     def get(s ...

  10. JAVA基础知识总结:一到二十二全部总结

    >一: 一.软件开发的常识 1.什么是软件? 一系列按照特定顺序组织起来的计算机数据或者指令 常见的软件: 系统软件:Windows\Mac OS \Linux 应用软件:QQ,一系列的播放器( ...

随机推荐

  1. 开源.NetCore通用工具库Xmtool使用连载 - 扩展动态对象篇

    [Github源码] <上一篇> 介绍了Xmtool工具库中的图形验证码类库,今天我们继续为大家介绍其中的扩展动态对象类库. 扩展动态对象是整个工具库中最重要的一个设计.在软件开发过程中, ...

  2. docker入门加实战—docker数据卷

    docker入门加实战-docker数据卷 容器是隔离环境,容器内程序的文件.配置等都在容器的内部,要读写容器内的文件非常不方便. 因此,容器提供程序的运行环境,但是程序运行产生的数据.程序运行依赖的 ...

  3. Arithmetic Progression 题解

    Arithmetic Progression 题目大意 存在一个打乱了顺序的等差数列 \(a\),你可以询问不超过 \(60\) 次,每次可以以以下两种方式之一进行询问: 查询 \(a\) 中是否有严 ...

  4. 【虹科干货】Redis 开发者需要了解的缓存驱逐策略

    在你搭建并配置了一个Redis数据库之后,Redis成功地提升了应用程序性能.然而这里有一个潜在问题,随着缓存数据的快速增加和内存占用率的逐渐上升,你很快会发现Redis缓存容量即将达到硬件存储容量上 ...

  5. Spring Boot整合OAuth2实现GitHub第三方登录

    Github OAuth 第三方登录示例 1.第三方登录原理 第三方登录的原理是借助OAuth授权来实现,首先用户先向客户端提供第三方网站的数据证明自己的身份获取授权码,然后客户端拿着授权码与授权服务 ...

  6. LangChain实战

    1.概述 最近,在研究LangChain时,发现一些比较有意思的点,今天笔者将给大家分享关于LangChain的一些内容. 2.内容 2.1 什么是LangChain? LangChain是一项旨在赋 ...

  7. 持续集成(CI)、自动化构建和自动化测试--初探

    转自:http://blog.csdn.net/adparking/article/details/5796532 此文章是为了总结前一段时间由于Maven2的学习而引起的一个持续集成的学习. 一.什 ...

  8. JavaScript 语法:数组的定义及其常用属性与方法

    作者:WangMin 格言:努力做好自己喜欢的每一件事 当一个程序需要用到多个数据的时候,这时我们就需要用到数组来将这些数据集合起来,以便后期调用.接下来就开始学习吧!! 数组的定义方法 1 .第一种 ...

  9. HanLP — Aho-Corasick DoubleArrayTire 算法 ACDAT - 基于双数组字典树的AC自动机

    双数组字典树能在O(1)(1是模式串长度)时间内高速完成单串匹配,并且内存消耗可控,然而软肋在于多模式匹配.如果要匹配多个模式串,必须先实现前缀查询,然后频繁截取文本后缀才可多匹配.比如 ushers ...

  10. 通义千问, 文心一言, ChatGLM, GPT-4, Llama2, DevOps 能力评测

    引言 "克隆 dev 环境到 test 环境,等所有服务运行正常之后,把访问地址告诉我","检查所有项目,告诉我有哪些服务不正常,给出异常原因和修复建议",在过 ...