在javafx中如何在tableView裏面插入checkbox?在stackoverflow上有相關的回答http://stackoverflow.com/questions/7217625/how-to-add-checkboxs-to-a-tableview-in-javafx。java
我的認爲stackoverflow上的回覆太過於繁瑣,便提出一個新思路,就是在數據類裏面加入一個checkbox,而後直接綁定。數組
首先定義一個封裝了的CheckBox類ide
package App.Public.UI; import javafx.beans.InvalidationListener; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.scene.control.CheckBox; public class checkbox { CheckBox checkbox=new CheckBox(); public ObservableValue<CheckBox> getCheckBox() { return new ObservableValue<CheckBox>() { @Override public void addListener(ChangeListener<? super CheckBox> listener) { } @Override public void removeListener(ChangeListener<? super CheckBox> listener) { } @Override public CheckBox getValue() { return checkbox; } @Override public void addListener(InvalidationListener listener) { } @Override public void removeListener(InvalidationListener listener) { } }; } public Boolean isSelected() { return checkbox.isSelected(); } }
咱們要在table裏面綁定的數據類型函數
package App.Model; import App.Public.UI.checkbox; public class person { public String name; public checkbox cb=new checkbox(); public person(String name) { this.name=name; } }
接着咱們在controller類裏面聲明表格的類型佈局
@FXML private TableView<person> table; @FXML private TableColumn<person,String> name; @FXML private TableColumn<person,CheckBox> checklist;
接着綁定數據this
@Override public void initialize(URL location, ResourceBundle resources) { ObservableList<person> data = FXCollections.observableArrayList( new person("1"), new person("2"), new person("3") ); name.setCellValueFactory(cellData -> new SimpleStringProperty(cellData.getValue().name) ); checklist.setCellValueFactory(cellData ->cellData.getValue().cb.getCheckBox()); table.setItems(data); }
checklist.setCellValueFactory(cellData ->cellData.getValue().cb.getCheckBox());咱們在這裏調用封裝了的checkbox的getCheckBox()方法,這裏會返回一個ObservableValue<CheckBox>類型的checkbox
下一個問題是如何得到選中的對象?其實只須要得到數組,遍歷一下他的checkbox是否被選中便可
這裏是一個小例子
@FXML public void check() { ObservableList<person> list=table.getItems(); for(person o:list) { if(o.cb.isSelected()) { System.out.println(o.name); } } }
運行效果以下
點擊button,觸發check()函數,輸出以下spa
以上是用了FXML來進行佈局,不用FXML也是同理的,但願能夠幫助到你們。code