Как сделать флажок с выбором всех флажков в табличном представлении на JavaFX и FXML? - PullRequest
0 голосов
/ 09 мая 2019

UsersApp

Привет всем. Столкнулся с такой проблемой. При нажатии на флажок, который находится сверху, необходимо установить флажки в поле рядом со всем списком в таблице. А затем, когда вы нажимаете на кнопку, удаляете выбранные записи, удаляете выбранные записи из базы данных MySQL.

Вот что было сделано.

PersonUnpersonValueFactoryController.java

package usersapp.controller;

import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.value.ObservableValue;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.CheckBox;
import javafx.scene.control.TableColumn;
import javafx.util.Callback;
import usersapp.model.Person;

public class PersonUnpersonValueFactory implements Callback<TableColumn.CellDataFeatures<Person, CheckBox>, ObservableValue<CheckBox>> {

    @Override
    public ObservableValue<CheckBox> call(TableColumn.CellDataFeatures<Person, CheckBox> param) {
        Person person = param.getValue();
        CheckBox checkBox = new CheckBox();
        checkBox.selectedProperty().setValue(person.isUnperson());

        checkBox.selectedProperty().addListener((ov, old_val, new_val) -> {
            person.setUnperson(new_val);
            System.out.println(new_val);
        });
        return new SimpleObjectProperty<>(checkBox);
    }
}

Person.java

public class Person {

private Boolean unperson;

    ...

    //unperson
    public Boolean isUnperson() {
        return this.unperson;
    }

    public void setUnperson(Boolean unperson){
        this.unperson = unperson;
    }

    ...

}

PersonView.fxml

<?import usersapp.controller.PersonUnpersonValueFactory?>

...

<TableView fx:id="personTable" editable="true" layoutX="7.0" layoutY="53.0" prefHeight="285.0" prefWidth="378.0" tableMenuButtonVisible="true" AnchorPane.bottomAnchor="4.0" AnchorPane.leftAnchor="7.0" AnchorPane.rightAnchor="7.0" AnchorPane.topAnchor="53.0">
                     <columns>
                        <TableColumn prefWidth="50.0" style="-fx-alignment: CENTER;">
                           <cellValueFactory>
                              <PersonUnpersonValueFactory />
                           </cellValueFactory>
                           <graphic>
                              <CheckBox mnemonicParsing="false" />
                           </graphic>
                        </TableColumn>
                        ...
                     </columns>
                  </TableView>

Буду очень признателен за помощь.

1 Ответ

3 голосов
/ 09 мая 2019

Вам просто понадобится слушатель на "master" CheckBox, чтобы посмотреть selectedProperty на предмет изменений. Затем вы можете использовать это для перебора элементов TableView и обновления их selectedProperty.

Обратите внимание, что с предоставленным вами ограниченным кодом мне нужно сделать некоторые предположения о том, как строится ваша модель данных.

checkBox.selectedProperty().addListener((observable, oldValue, newValue) -> {

    // Loop through entire TableView to set the selected property for each Item
    for (Item item : tableView.getItems()) {
        item.setSelected(newValue);
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...