,可以通过以下步骤实现:
下面是一个示例代码,演示如何在TableView中选择的进程结束时更新按钮:
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来显示,并且当选择的进程状态为"已结束"时,更新按钮将变为可用状态。注意,这只是一个简单的示例,实际应用中可能需要更复杂的逻辑来监控和更新进程状态。
腾讯云相关产品和产品介绍链接地址:
领取专属 10元无门槛券
手把手带您无忧上云