javafx 在tableView裏插入checkbox

在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

相關文章
相關標籤/搜索