Verificar seleção de CheckBox dentro de uma tableview

Os dois. Java e javafx sou novo. Estou tentando fazer uma aplicação para o trabalho da faculdade.

Olha!!, vou traçar um caminho e se desejar poderá segui-lo.
Em resumo é assim.

1.Pode pegar qualquer informação de uma TableView acessando os dados que foram enviados pra ela.

2.Dentro da TableView pode alterar o conteudo de determinada Celula pra exibir qualquer coisa visivel, mesmo que não tenha nada a ver com o que foi enviado, para isso JavaFX tem um recurso bastante interessante, o método setGraphic dentro dos Nodes.

3.Evite copiar e colar pura e simplesmente codigos de terceiros e se fazer, tenta entender o que cada coisa faz, nem precisa ir a fundo, entendendo já basta.

4.Quando clica na celula da TableView, tem o dado daquela celula, mas voce pode pegar o dado da linha toda, no exemplo acima faz isso

5.Posta qualquer duvida que desejar, mas de preferencia algo que dê pra ser reproduzido, assim fica mais facil entender o problema e se possível apontar uma solução.

Veja esse exemplo modificando a celula, é bem simples e poderoso, veja que mandei pintar um CheckBox, mas poderia colocar qualquer coisa.

import javafx.application.Application;
import javafx.beans.property.BooleanProperty;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.geometry.Insets;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.CheckBox;
import javafx.scene.control.Label;
import javafx.scene.control.TableCell;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TablePosition;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.CheckBoxTableCell;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
 /*from   w  w  w.  ja va 2  s. c o  m*/
public class TableViewTest extends Application {
 
    private final TableView<Person> table = new TableView<>();
    private final ObservableList<Person> data =
            FXCollections.observableArrayList(new Person("A", "B", false));
    final HBox hb = new HBox();
 
    public static void main(String[] args) {
        launch(args);
    }
 
    @Override
    public void start(Stage stage) {
        Scene scene = new Scene(new Group());
        stage.setWidth(450);
        stage.setHeight(550);
 
 
        TableColumn firstNameCol = new TableColumn("First Name");
        firstNameCol.setMinWidth(100);
        firstNameCol.setCellValueFactory(
                new PropertyValueFactory<>("firstName"));
 
        TableColumn lastNameCol = new TableColumn("Last Name");
        lastNameCol.setMinWidth(100);
        lastNameCol.setCellValueFactory(
                new PropertyValueFactory<>("lastName"));
        
        TableColumn<Person,Boolean> atletaCol = new TableColumn("Atleta");
        atletaCol.setMinWidth(100);        
        atletaCol.setCellValueFactory( cellData -> cellData.getValue().atletaProperty() );
        //atletaCol.setCellValueFactory( new PropertyValueFactory<Person, Boolean>("atleta") );
    // atletaCol.setCellFactory(CheckBoxTableCell.forTableColumn(atletaCol) );
         
        
        atletaCol.setCellFactory(column -> {
            return new TableCell<Person, Boolean>() {
                
                CheckBox check = new CheckBox("");
                
                { 
                   
                   check.selectedProperty().addListener( (obj,old,n) -> {
                        System.out.println("Troquei Check " + n );                      
                   });
                   
                   /*
                   this.setOnMouseClicked( (e) -> {
                      Person person = table.getSelectionModel().getSelectedItem(); 
                      System.out.println(person.firstName + " atleta = " +  person.getAtleta() );
                   } );*/
                        
                } 
                @Override
                protected void updateItem(Boolean item, boolean empty) {
                    super.updateItem(item, empty);
                    if (item == null || empty) {                        
                        setText(null);
                        setGraphic(null);
                        
                    } else {
                        setText("");                        
                        check.setSelected(item);                 
                        setGraphic(check);
                    }
                }
            };
        });
       
        
        
        table.setEditable(false);
        table.setItems(data);
        table.getColumns().addAll(firstNameCol, lastNameCol, atletaCol);
        
        /*
        table.addEventHandler(MouseEvent.MOUSE_CLICKED, event -> {
            Person person = table.getSelectionModel().getSelectedItem();
            System.out.println(person.firstName + " atleta = " +  person.getAtleta() );
        });   
        */
 
        final Button addButton = new Button("Add");
        addButton.setOnAction((ActionEvent e) -> {
            data.add(new Person("Z","X",true));
         });
 
        hb.getChildren().addAll(addButton);
        hb.setSpacing(3);
 
        final VBox vbox = new VBox();
        vbox.setSpacing(5);
        vbox.setPadding(new Insets(10, 0, 0, 10));
        vbox.getChildren().addAll(table, hb);
 
        ((Group) scene.getRoot()).getChildren().addAll(vbox);
 
        stage.setScene(scene);
        stage.show();
    }
 
    public static class Person {
 
        private final SimpleStringProperty firstName;
        private final SimpleStringProperty lastName;
        
        private BooleanProperty atleta = new SimpleBooleanProperty(false);
 
        private Person(String fName, String lName, boolean atleta) {
            this.firstName = new SimpleStringProperty(fName);
            this.lastName = new SimpleStringProperty(lName);
            this.atleta  = new SimpleBooleanProperty(atleta);             
        }
 
        public String getFirstName() {
            return firstName.get();
        }
 
        public void setFirstName(String fName) {
            firstName.set(fName);
        }
 
        public String getLastName() {
            return lastName.get();
        }
 
        public void setLastName(String fName) {
            lastName.set(fName);
        }
        
        public BooleanProperty atletaProperty() {
            return atleta;
        }
                
        public void setAtleta(boolean atleta) {
            this.atleta.set(atleta);
        }
        
        public boolean getAtleta() {
            return atleta.get();
        }
    }
}

Obrigado j-menezes pela Ajuda. Não só pelos códigos mas também pelas dicas de estudos. Pessoas assim nos motiva a continuar. Gratidão!!

1 curtida