首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在TableView中选择的进程结束时更新按钮JavaFX

,可以通过以下步骤实现:

  1. 首先,你需要创建一个TableView来显示进程列表。TableView是JavaFX中用于显示表格数据的控件。你可以使用TableView的setItems()方法设置进程列表的数据源。
  2. 接下来,你需要为TableView添加一个监听器,以便在选择的进程结束时更新按钮。你可以使用TableView的getSelectionModel()方法获取选择模型,然后使用selectedItemProperty()方法添加一个监听器。
  3. 在监听器中,你可以使用Platform类的runLater()方法来确保更新按钮的操作在JavaFX应用程序的主线程中执行。在runLater()方法中,你可以更新按钮的状态,例如设置按钮为不可用状态。
  4. 当选择的进程结束时,你可以在监听器中使用Java的进程管理功能来检查进程的状态。一旦进程结束,你可以再次使用Platform.runLater()方法来更新按钮的状态,例如设置按钮为可用状态。

下面是一个示例代码,演示如何在TableView中选择的进程结束时更新按钮:

代码语言:java
复制
import javafx.application.Application;
import javafx.application.Platform;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class ProcessMonitor extends Application {

    private TableView<ProcessInfo> tableView;
    private Button updateButton;

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("Process Monitor");

        // 创建进程列表的TableView
        tableView = new TableView<>();
        tableView.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);

        // 创建进程名称列
        TableColumn<ProcessInfo, String> nameColumn = new TableColumn<>("进程名称");
        nameColumn.setCellValueFactory(new PropertyValueFactory<>("name"));

        // 创建进程状态列
        TableColumn<ProcessInfo, String> statusColumn = new TableColumn<>("状态");
        statusColumn.setCellValueFactory(new PropertyValueFactory<>("status"));

        tableView.getColumns().addAll(nameColumn, statusColumn);

        // 创建更新按钮
        updateButton = new Button("更新");
        updateButton.setDisable(true);

        // 添加按钮点击事件处理程序
        updateButton.setOnAction(event -> {
            // 更新按钮的操作
            System.out.println("更新按钮被点击");
        });

        // 创建布局并添加控件
        VBox vbox = new VBox(tableView, updateButton);
        Scene scene = new Scene(vbox, 400, 300);
        primaryStage.setScene(scene);
        primaryStage.show();

        // 模拟进程列表数据
        ObservableList<ProcessInfo> processList = FXCollections.observableArrayList(
                new ProcessInfo("进程1", "运行中"),
                new ProcessInfo("进程2", "运行中"),
                new ProcessInfo("进程3", "已结束")
        );

        // 设置进程列表数据源
        tableView.setItems(processList);

        // 添加选择监听器
        tableView.getSelectionModel().selectedItemProperty().addListener((obs, oldSelection, newSelection) -> {
            if (newSelection != null && newSelection.getStatus().equals("已结束")) {
                // 进程已结束,更新按钮状态
                Platform.runLater(() -> updateButton.setDisable(false));
            } else {
                // 进程未结束,禁用按钮
                Platform.runLater(() -> updateButton.setDisable(true));
            }
        });

        // 模拟进程结束
        ExecutorService executorService = Executors.newSingleThreadExecutor();
        executorService.execute(() -> {
            try {
                Thread.sleep(5000); // 模拟进程运行5秒钟
                processList.get(2).setStatus("已结束"); // 将第三个进程状态设置为已结束
                executorService.shutdown(); // 关闭线程池
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });
    }

    public static class ProcessInfo {
        private String name;
        private String status;

        public ProcessInfo(String name, String status) {
            this.name = name;
            this.status = status;
        }

        public String getName() {
            return name;
        }

        public String getStatus() {
            return status;
        }

        public void setStatus(String status) {
            this.status = status;
        }
    }
}

在这个示例中,我们创建了一个简单的进程监控应用程序。进程列表使用TableView来显示,并且当选择的进程状态为"已结束"时,更新按钮将变为可用状态。注意,这只是一个简单的示例,实际应用中可能需要更复杂的逻辑来监控和更新进程状态。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Using JavaFX UI Controls 12 Table View

很多JavaFX SDK API种类为表格表单呈现数据。JavaFX 应用对创建表格最重要TableView, TableColumn和TableCell这三个类。...例子 12-1, 表格组件被添加到 VBox  布局容器,然而你也可以直接将其添加到应用场景。 例子 12-1定义了3列将用来存放地址簿信息:一个联系人 姓和名以及电子邮箱地址。...因为ObservableList 对象能够跟踪表格元素任何变化,当其中数据变化,TableView 内容也自动更新。...,文本域输入文本将被添加到Person 构造方法,并添加到 data (observable list)。...例12-12,数据行 hash map(哈希map) 展现了TableView对象一个单行。

11.3K20

iOStabBar按钮再次点击实现界面刷新(包含完整demo)【特色功能:更新数据期间旋转tabbaricon】

tabBar,以及购物券类app首页tabBar 3、特色功能:更新数据期间旋转tabbaricon blink https://blink.csdn.net/details/1175811 I、...当进入首页时再次点击tabBar可刷新界面数据 1.1 selectedViewController记录上一次按钮点击,用于数据刷新 新增一个属性 记录上一次被点击按钮tag /** 记录上一次被点击按钮...修改UITabBarItemtitle ,达到选中之后和未选中title不一样效果 切换到首页时title为刷新,提示用户再次点击tab刷新界面数据 在这里插入图片描述 未选择首页tab时title...并传递icon所在视图给外围来实现旋转动画 // 遍历tabBar上子控件,给"UITabBarButton"类型按钮绑定动画效果事件 //(注意:遍历添加动画事件时机是layoutSubviews...            if (self.block) {                 self.block(imageView);             }             }}} 2.2 更新数据期间旋转

2.7K20

手拉手JavaFX场景

()值摆放每一个子节点setHgrow(hbox,Priority.ALWAYS);javafx有4控件来表示多项数据ListView:列表TreeView:树TableView:表格TreeTableView...:"+Thread.currentThread().getName()); //可以在这里更新组件 } }); }}screen类public class...Override public void start(Stage primaryStage) throws Exception{ Button button = new Button("按钮...BorderPane顶部和底部区域允许可调整大小节点占用所有可用宽度。左边界区域和右边界区域占据顶部和底部边界之间可用垂直空间。默认情况下,所有边界区域尊重子节点首选宽度和高度。...放置顶部,底部,左侧,右侧和中心区域中节点默认对齐方式如下:● 顶部: Pos.TOP_LEFT● 底部: Pos.BOTTOM_LEFT● 左侧: Pos.TOP_LEFT● 右侧: Pos.TOP_RIGHT

14500

JavaFX 11发行说明

添加API以自定义Spinner控件步骤重复计时 JavaFX 11修改值步骤之前,必须在Spinner控件箭头按钮上按下鼠标的默认持续时间。...()会抛出ISE 应用程序生命周期 JDK-8089454 [HTMLEditor]选择删除CENTER对齐 控制 JDK-8154039 选择TabPane :: getTabs()未包含选项卡时内存泄漏...控制 JDK-8157690 [TabPane]排序选项卡使选项卡选择菜单为空 控制 JDK-8165459 HTMLEditor:意外禁用剪贴板工具栏按钮 控制 JDK-8185854 具有自定义外观...控制 JDK-8193311 [Spin​​ner]ENTER上未激活默认按钮 控制 JDK-8193495 快速删除和添加操作后,TabPane不会正确更新标题区域中选项卡位置 控制 JDK-8194913...版本号是错误 其他 JDK-8195799 javafx模块中使用系统记录器而不是平台记录器 其他 JDK-8195800 消除对javafx模块sun.reflect.misc依赖 其他

6.5K60

JavaFX之Scene Builder使用(开发一款GUI小工具原来这么简单)

,如果您是学Java开发,业余想做GUI小工具,可以选择使用JavaFX。...Path to SceneBuilder 填入下载好SceneBuilder.exe文件。...FXML是一种以XML格式表示JavaFX界面对象文件,FXML文件每一个元素可以映射到JavaFX一个类,每个FXML元素属性或者其子元素都可以映射为该对应JavaFXML类属性....拿上面的按钮例子来解释一下标签属性是干嘛吧~ fx:id指就是这个控件id值,为Controller类控制这个控件 onAction指的是点击这个按钮就能实现什么功能 text指就是这个按钮文本...其余那些就是控制按钮大小 总结 以上是博主千辛万苦纯手打的JavaFX入门教程以及SceneBuilder使用,如果小伙伴们有什么不懂得,可以直接私信博主,有帮助的话麻烦点赞+收藏关注,您得支持是博主更新得最大动力

7.9K31

JavaFX-TableView详解

先看看TableView中有些什么 IDEA,按住Ctrl然后点中TableView关键字会自动跟进到它定义地方,我们可以先看看这里面到底都有些什么东西。.../blog/2015/04/doc03_tableview/ 官方文档:http://docs.oracle.com/javafx/2/ui_controls/table-view.htm TableView...TableViewObservableList集合 } }); 添加行删除行也是同样操作,可以直接修改TableView维护集合来完成。...增加列,删除列 这就不仅仅要删除集合数据,还要从表格里面的Columns集合删除相应数据才可以,或许你还会在删除和增加中加入一定判断来保证操作正确性: table.getColumns()....add(tempCol); // 列表显示新增列 table.getColumns().remove(index); // 删除index位置列 监听列变化 你大可以选择向源文件那样

3.4K60

Java一分钟之-JavaFX:构建桌面GUI应用

Java世界里,JavaFX是一个强大工具包,用于构建丰富、交互式桌面应用程序。...环境配置错误 问题描述:初学者开始JavaFX项目时,常遇到问题之一是环境配置不正确,导致无法编译或运行JavaFX程序。 解决方案: 确保你Java版本至少为Java 8或更高。...如果手动配置,请确保JavaFX库路径被正确添加到项目的类路径。 2. 布局混乱 问题描述:设计界面时,元素布局常常不如预期,导致界面混乱。...使用约束系统(如GridPane列宽和行高约束)来精确控制组件位置和大小。 3. 事件处理不当 问题描述:事件监听器设置不正确,导致按钮点击或其他交互行为没有响应。...代码示例:一个简单JavaFX应用 下面是一个简单JavaFX示例,展示了一个包含一个按钮和文本显示区域应用,当点击按钮时,文本会更新

60920

iOS开发之表视图爱上CoreData

(2)实现添加功能,点击右上角添加按钮时会跳转到添加页面,添加页面中有两个TextField来接受用户输入,点击添加按钮进行数据添加。...把传过来实体对象进行更新,再保存。...3.之前保存ViewController如果Person为空,说明是执行添加记录方法我们就生成一个新person, 如果Person不为空则不新建Person对象,直接更新完保存。     ...中点击取消按钮触发事件,跳转到原来编辑界面 1 2 3 4 5 6 //回调图片选择取消 -(void)imagePickerControllerDidCancel:(UIImagePickerController...自己tableView,所以加载cell时要进行相应选择,searchcell是我们自定义cell, 选择代码如下: 1 //根据不同tableView来设置不同cell模板

2.1K80

PyQt5数据库开发3 6 QSqlQuery完整实操案例③

测试返回函数改一下欧阳锋数据检查返回值修改myMainWindow.pyupdateRecord函数测试修改成功数据库里检查一下,已经改了tableView双击寻找函数名qt上,tableView...上点右键,选择转到槽选择双击记住函数名写函数代码测试插入记录功能在myMainWindow.py添加插入函数myDialogData.py添加setInsertRecord函数myMainWindow.py...添加返回记录处理测试露出刚刚插入数据数据库里面查一查删除记录功能在myMainWindow.py添加删除函数测试删除功能将欧阳锋数据删掉点击删除后,界面上显示已被删除去数据库查查有没有涨工资和测试...SQL添加涨工资函数和降薪函数记一下原始工资点击涨工资按钮发现想涨500,结果跑了两次,涨了1000元一次按钮两次操作bug这是PyQt5常见bug,加多pyqtSlot()函数前面试试看import...updateRecord函数,函数最后,是这样应该是红色框语句有问题,导致更新tableView失败注释掉红色框中代码,改成下面这样测试双击8000,改成9000点击确定后返回我正在参与2023

16100

JavaFX 11 发布,与 JDK 拆分后首个正式大版

由于 JavaFX 库被写成了 Java API,因此 JavaFX 应用程序代码可以调用各种 Java 库 API,例如 JavaFX 应用程序可以使用 Java API 库来访问本地系统功能并且连接到基于服务器中间件应用程序...此次更新主要内容如下: 重要更新JavaFX 模块指定:因为 JDK 不再包含 JavaFX,那么必须明确包含应用程序使用 JavaFX 模块,详情见:https://openjfx.io/openjfx-docs... JavaFX 11 修改值步骤之前,必须在 Spinner 控件箭头按钮上按下鼠标一段默认持续时间,JavaFX 11 已添加两个新属性“initialDelay”和“repeatDelay”来配置此操作...默认 GTK 版本从 v2 更新为 v3。将在存在 gtk3 库 Linux 平台上使用 GTK 3。...此外公告还提供了关于以下一些常见问题解决方案: OpenJDK 11 环境下,JavaFX Ubuntu 18.04 上启用 Wayland 时崩溃。

2.2K40

JavaFX 简介

FXML中用fx:id属性指定ID,可以控制器声明为一个类字段,通过这个字段就可以和界面组件进行交互。同样道理,onAction声明事件处理程序,控制器中就是一个方法。...主程序需要使用FXMLLoader来加载FXML资源,其他部分没有太大变化。...如果希望修改组件样式,JavaFX提供了CSS接口,让我们可以直接使用CSS文件修改样式。首先需要在FXML文件添加相应样式表引用。文件名前面的@表示这个CSS文件和FXML文件同一目录下。...#btnShowPassword { -fx-background-color: deeppink; } 上面用了ID选择器,所以对应地,FXML也需要ID属性。...如果有同学想使用Java编写图形界面程序,可以考虑使用JavaFX,这是一个很不错选择

5.6K70

六天完成一个简单iOS App - 第四天

(2)当点击别的按钮时,页面切换到别的页面,并将按钮置于选中状态,将之前被点击按钮置于未选中状态,并将button下面指示条移动到现在button下面。...(3)当手指滑动界面进行切换界面时,也将相应按钮置于选中状态,底部指示条移动到选中按钮,之前按钮取消选中状态。页面的滑动切换需要用到ScrollView代理方法对页面的滑动进行判断。...也就是当点击了button或者滑动界面之后,根据scrollView偏移量判断需要加载哪个控制器View,然后将View添加到scrollView。...endRefreshing]; MJRefresh内部实现思路,tableViewtitleView上方添加下拉刷新View,使用scrollView代理方法监听tableViewcontentOffset...方法调用非常频繁,而NSDateFormatter和NSCalendar对象没有必要这么频繁创建,可以使用懒加载,也可以再initialize方法创建,initialize方法只类加载时调用一次。

1.4K70

C++ Qt开发:TableView与TreeView组件联动

Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,Qt我们可以通过拖拽方式将不同组件放到指定位置,实现图形化开发极大方便了开发效率,本章将重点介绍TableView...,底部保留两个按钮按钮1用于该表表格行列个数,按钮2则用于设置TableView表格表头参数,整个表格我们将其设置为可编辑状态。...QItemSelectionModel模型,它负责跟踪哪些项被选中,以及模型选择状态发生变化时发出信号。...如下图所示;DialogSize.ui接着来看on_pushButton_clicked按钮是如何实现,该按钮主要用于实现改变表格行与列,当点击后则会弹出一个DialogSize自定义对话框,至于对话框是如何添加之前文章已经详细介绍过了..._2_clicked功能实现与第一个按钮完全一致,该按钮主要实现对父窗体TableView表头进行重新设置,弹出对话框之前,需要将当前表头元素复制到strList列表容器内,并通过使用子对话框

33310

第68篇:javafx编写扫描器UI界面的线程死锁问题及坑点总结

但是实测结果,经常在如下代码,出现报错问题,导致程序崩溃,所有扫描任务停止。 这是一个隐藏非常深线程安全bug,一天中会不定时出现几次,而且没办法复现,让我大伤脑筋。...以下这个界面,按钮控件特别多,每个按钮功能类似,于是我用一个Map集合放置每一个按钮标题和按钮事件中用到关键值,然后用一个for循环,遍历Map集合添加Button按钮组件,很快搞定这个界面,比Scenebuilder...坑7:javafxjdk11至jdk17编译问题 按照正常编写javafx程序流程,idea 2022版本编译出来jar包,有时候会提示找不到主类,有时候会提示缺少JavaFX运行组件。...对于jdk8下javafx编译,很简单,直接编译成一个jar包就可以jdk8上双击运行,因为jdk是自带javafx,但是对于更高版本jdk,比如说jdk11或者jdk17,默认是不带javafx...首先使用idea 2022新建项目,JDK选择大于等于jdk8版本即可,小于jdk8不支持javafx。 可以看到idea 2022版本,已经自动pom.xml文件添加了javafx库了。

29031

PyQt5数据库开发3 6 QSqlQuery完整实操案例【图文详解】

添加一个tableview  3. 添加资源  4. 添加Action  5. 修改Action状态 6. 添加工具栏 7. 添加菜单  8. 实现按钮功能  二、Qt对话框窗体设计 1....再次运行 六、将对话框编辑数据返回给界面 1. myDialogData.py添加返回函数 2. myMainWindow.py添加显示代码 3. 测试返回函数 4....myMainWindow.py添加插入函数 2. myDialogData.py添加setInsertRecord函数  3. myMainWindow.py添加返回记录处理  4....寻找函数名 qt上,tableView上点右键,选择转到槽 选择双击  记住函数名  2. 写函数代码 3. 测试 八、插入记录功能 1....修改代码 找到__updateRecord函数,函数最后,是这样 应该是红色框语句有问题,导致更新tableView失败 注释掉红色框中代码,改成下面这样 3.

1K30

iOS面试题梳理(三)

第二种:点击某个按钮后,所有与之同类型按钮都要修改值,那么可以通过创建按钮时将按钮存入到数组需要时候遍历查找。 线程与进程区别和联系?...线程:进程一个分支,是进程实体,是CPU调度和分派基本单元,它是比进程更小能独立运行基本单位,线程自己基本不拥有系统资源,只拥有一点在运行必不可少资源(程序计数器、一组寄存器、栈),但是它可与同属一个进程其他线程共享进程所拥有的全部资源...进程有独立地址空间,一个进程崩溃后,保护模式下不会对其它进程产生影响,而线程只是一个进程不同执行路径。...运用字典,点击五个按钮一个可以从字典里选择一个控制器对象,将其View显示到主控制器视图上。...(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); 主队列:每一个应用程序对应唯一主队列,直接GET即可;多线程开发,使用主队列更新UI; dispatch_queue_t

1.4K71

iOS-UI控件之UITableView(四)- cell数据刷新

TableView- 数据刷新 数据刷新 添加数据 删除数据 更改数据 全局刷新方法(最常用) [self.tableView reloadData]; // 屏幕上所有可视cell都会刷新一遍 局部刷新方法...deleteRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationMiddle]; 更新数据(没有添加和删除数据,仅仅是修改已经存在数据...代理方法 /** * 只要实现了这个方法,左滑出现Delete按钮功能就有了 * 点击了“左滑出现Delete按钮”会调用这个方法 */ - (void)tableView:(UITableView...:(NSIndexPath *)indexPath { return @"删除"; } 左滑出现N个按钮 需要实现tableView代理方法 /** * 只要实现了这个方法,左滑出现按钮功能就有了...setEditing:YES animated:YES]; // 默认情况下,进入编辑模式时,左边会出现一排红色“减号”按钮 在编辑模式多选 // 编辑模式时候可以多选 self.tableView.allowsMultipleSelectionDuringEditing

1.7K60

关于 MVC 一个常见误用

###2.违反数据流动规则和单一职责规则 如果我们仔细思考,会发现,用户点击添加按钮,或者侧滑删除 cell 时, View Controller 其实发生了这些事情: 1.维护 Model (也就是...理想化数据流动应该是单向:UI 操作 -> 经由 View Controller 进行模型更新 -> 新模型经由 View Controller 更新 UI -> 等待新 UI 操作,而在例子...另外,PM 和用户也许希望详情页面也能直接删除这个正在编辑待办。...2.添加和删除条目的时候,我们都需要进行网络请求,另外我们也需要根据请求返回状态更新添加按钮状态。...单独 **ToDoStore** 作为模型带来另一个好处是,因为它与具体 View Controller 分离了,进行持久化时,我们可以有更多选择

88850
领券