JavaFX:CheckBoxTableCell 在用户选中复选框时获取 ActionEvent

编程入门 行业动态 更新时间:2024-10-28 06:35:21
本文介绍了JavaFX:CheckBoxTableCell 在用户选中复选框时获取 ActionEvent的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我想在用户选中或取消选中 tableView 中的复选框时触发方法或操作.当用户使用 checkBox 时不会触发 coursData.addListener(...) .

I want to trigger a method or action when the user check or uncheck a checkbox in the tableView. the coursData.addListener(...) doesn't get triggered when the user use the checkBox .

这是我编译的代码,窗口显示带有带有复选框的 tableView.

Here is my code it compiles and the windows appears with the tableView with checkbox.

package testCheckBox2; import javafx.application.Application; import javafx.beans.InvalidationListener; import javafx.beans.Observable; import javafx.beans.property.BooleanProperty; import javafx.beans.property.SimpleBooleanProperty; import javafx.beans.property.SimpleStringProperty; import javafx.beans.property.StringProperty; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.ButtonBase; import javafx.scene.control.TableColumn; import javafx.scene.control.TableView; import javafx.scene.control.cell.CheckBoxTableCell; import javafx.scene.control.cell.PropertyValueFactory; import javafx.scene.layout.BorderPane; import javafx.scene.layout.HBox; import javafx.stage.Stage; public class CheckBoxTableCellTest extends Application { private TableView<cours> tableView; public ObservableList<cours> coursData ;//= FXCollections.observableArrayList(); @Override public void start(Stage primaryStage) { this.tableView = new TableView<cours>(); final TableColumn<cours, String> Cours = new TableColumn<cours, String>("Cours"); final TableColumn<cours, Boolean> checkedCol = new TableColumn<cours, Boolean>("Checked"); this.coursData =FXCollections.observableArrayList( new cours("Analyse", "3"), new cours("Analyse TP", "4"), new cours("Thermo", "5"), new cours("Thermo TP", "7"), new cours("Chimie", "8")); tableView.setItems(this.coursData); tableView.getColumns().addAll(Cours, checkedCol); Cours.setCellValueFactory(new PropertyValueFactory<cours, String>("cours")); checkedCol.setCellValueFactory(new PropertyValueFactory<cours, Boolean>("checked")); checkedCol.setCellFactory(CheckBoxTableCell.forTableColumn(checkedCol)); checkedCol.setEditable(true); tableView.setEditable(true); final BorderPane root = new BorderPane(); root.setCenter(tableView); coursData.addListener(new InvalidationListener() { @Override public void invalidated(Observable o) { System.out.println("checkBox change state "); //Here is my problem. //When the user click on a checkBox , the method isn't call . } }); Scene scene = new Scene(root, 300, 400); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { launch(args); } public static class cours { private StringProperty cours; private StringProperty coursID; private BooleanProperty checked; public cours(String cours, String coursID) { this.cours = new SimpleStringProperty(cours); this.coursID = new SimpleStringProperty(coursID); this.checked = new SimpleBooleanProperty(false); } public String getCours() { return cours.get(); } public String getCoursID() { return coursID.get(); } public boolean isChecked() { return checked.get(); } public void setCours(String cours) { this.cours.set(cours); } public void setCoursID(String coursID) { this.coursID.set(coursID); } public void setChecked(boolean checked) { this.checked.set(checked); } public StringProperty coursProperty() { return cours; } public StringProperty coursIDProperty() { return coursID; } public BooleanProperty checkedProperty() { return checked; } } }

推荐答案

您有两种方法可以在单击任何复选框时收到通知.

You have two ways of getting a notification when any of the check boxes is clicked.

一:提供回调作为 CheckBoxTableCell.forTableColumn 的参数而不是 tableColumn:

One: providing a callback as argument for CheckBoxTableCell.forTableColumn instead of the tableColumn:

checkedCol.setCellFactory(CheckBoxTableCell.forTableColumn(new Callback<Integer, ObservableValue<Boolean>>() { @Override public ObservableValue<Boolean> call(Integer param) { System.out.println("Cours "+items.get(param).getCours()+" changed value to " +items.get(param).isChecked()); return items.get(param).checkedProperty(); } }));

二:提供对集合的回调:

Two: providing a callback to the collection:

final List<Cours> items=Arrays.asList(new Cours("Analyse", "3"), new Cours("Analyse TP", "4"), new Cours("Thermo", "5"), new Cours("Thermo TP", "7"), new Cours("Chimie", "8")); this.coursData = FXCollections.observableArrayList(new Callback<Cours, Observable[]>() { @Override public Observable[] call(Cours param) { return new Observable[] {param.checkedProperty()}; } }); coursData.addAll(items);

现在正在监听集合中的变化:

and now listening to changes in the collection:

coursData.addListener(new ListChangeListener<Cours>() { @Override public void onChanged(ListChangeListener.Change<? extends Cours> c) { while (c.next()) { if (c.wasUpdated()) { System.out.println("Cours "+items.get(c.getFrom()).getCours()+" changed value to " +items.get(c.getFrom()).isChecked()); } } } });

更多推荐

JavaFX:CheckBoxTableCell 在用户选中复选框时获取 ActionEvent

本文发布于:2023-11-06 15:58:55,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1564144.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:复选框   用户   JavaFX   CheckBoxTableCell   ActionEvent

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!