【问题标题】:JavaFX TableView Disable CheckBoxJavaFX TableView 禁用复选框
【发布时间】:2017-11-03 11:33:51
【问题描述】:

我创建了一个 TableView,其中包含一个复选框列(isSelected)和三个信息列(姓名、姓氏、工作)。我想根据用户信息禁用一些复选框。例如,如果用户名为“Peter”,则 Peter 附近的复选框将被禁用。但我做不到。这是我的一些代码:

Person.java

public class Person {

private final SimpleStringProperty name;
private final SimpleStringProperty surname;
private final SimpleStringProperty job;
private final BooleanProperty isSelected;

public Person(SimpleStringProperty name, SimpleStringProperty surname, SimpleStringProperty job,
        BooleanProperty isSelected) {
    super();
    this.name = name;
    this.surname = surname;
    this.job = job;
    this.isSelected = isSelected;
}

public SimpleStringProperty getName() {
    return name;
}

public SimpleStringProperty getSurname() {
    return surname;
}

public SimpleStringProperty getJob() {
    return job;
}

public BooleanProperty getIsSelected() {
    return isSelected;
}



}

Controller.java

public class Controller {

@FXML
private final TableView<Person> fxPersonTableView;

@FXML
private final TableColumn<Person, Boolean> fxSelectColumnCheckbox;

@FXML
private final TableColumn<Person, String> fxNameTableColumn;

@FXML
private final TableColumn<Person, String> fxSurnameTableColumn;

@FXML
private final TableColumn<Person, String> fxJobTableColumn;

private ObservableList<Person> persons;

private void createTableView(){

    fxSelectColumnCheckbox.setCellValueFactory(c -> c.getValue().getIsSelected());

    fxSelectColumnCheckbox.setCellFactory(CheckBoxTableCell.forTableColumn(c -> {
    //I guess here I will put some control like as name check and disable 
    //the checkbox in this row. But I can't reach the checkbox individually.
        return persons.get(c).getIsSelected();
    }));

    fxNameTableColumn.setCellValueFactory(c -> persons.get(c).getName());
    fxSurnameTableColumn.setCellValueFactory(c -> persons.get(c).getSurname());
    fxJobTableColumn.setCellValueFactory(c -> persons.get(c).getJob());
    fxPersonTableView.getSelectionModel.setSelectionMode(SelectionMode.MULTIPLE);
    fxPersonTableView.setItems(persons);


}



}

【问题讨论】:

    标签: java checkbox javafx tableview


    【解决方案1】:

    这对你有用。

    fxNameTableColumn.setCellFactory(column -> {
                    return new TableCell<Person, String>() {
                        @Override
                        protected void updateItem(String item, boolean empty) {
                            super.updateItem(item, empty);
                            // Iterating through Table rows
                            TableRow<Person> currentRow = getTableRow();
                            if (item != null && !empty) {
                                if (item.equals("Peter")) {
                                    // a row containing Peter name is found
                                    // disable your check box  
                                    setStyle(fxPersonTableView.getStyle());
                                } 
                            } else {
                                setStyle(fxPersonTableView.getStyle());
                            }
                        }
                    };
                });
    

    【讨论】:

      【解决方案2】:

      谢谢@Ammar,我已经用你的回答解决了这个问题:

      fxSelectColumnCheckbox.setCellFactory(column -> {
              return new CheckBoxTableCell<Person, Boolean>() {
                  @Override
                  public void updateItem(Boolean item, boolean empty) {
                      super.updateItem(item, empty);
      
                      TableRow<Person> currentRow = getTableRow();
                      this.setDisable(false); // it is required to fit default state
                      if (currentRow.getItem() != null && !empty) {
                          if (currentRow.getItem().getName().equals("Peter")) {
                              this.setDisable(true);
                              setStyle(fxPersonTableView.getStyle());
                          }
                      } else {
      
                          setStyle(fxPersonTableView.getStyle());
                      }
                  }
              };
          });
      

      【讨论】:

        猜你喜欢
        • 2019-04-21
        • 2014-06-08
        • 2017-09-09
        • 1970-01-01
        • 2013-03-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多