表视图选中的绑定复选框

时间:2014-01-30 13:49:46

标签: javafx javafx-2

如何

  • 表格列选择复选框将选择
  • 我在表格视图中选中了复选框,不幸的是,我会选中表格列,所有复选框都是取消选中,单击表格列复选框只选择

如何在我的代码中重新排列帮助我。

package tableviewwithaddcheckbox;

import com.sun.javafx.runtime.VersionInfo;
import javafx.application.Application;
import static javafx.application.Application.launch;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ListChangeListener;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.CheckBox;
import javafx.scene.control.ContentDisplay;
import javafx.scene.control.SelectionMode;
import javafx.scene.control.TableCell;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
import javafx.util.Callback;

/**
 *
 * @author reegan
 */
public class TableViewWithAddCheckBox extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(final Stage stage) {
        stage.setTitle("People");


        // create a table.
        final TableView<Person> table = new TableView<>(
                FXCollections.observableArrayList(
                new Person("Jacob", "Smith"),
                new Person("Isabella", "Johnson"),
                new Person("Ethan", "Williams"),
                new Person("Emma", "Jones"),
                new Person("Michael", "Brown")));

        table.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);

        // define the table columns.
        TableColumn<Person, String> firstNameCol = new TableColumn<>("First Name");
        firstNameCol.setCellValueFactory(new PropertyValueFactory("firstName"));
        TableColumn<Person, String> lastNameCol = new TableColumn<>("Last Name");
        lastNameCol.setCellValueFactory(new PropertyValueFactory("lastName"));
        TableColumn<Person, Boolean> actionCol = new TableColumn<>("Action");
        actionCol.setSortable(false);

        // define a simple boolean cell value for the action column so that the column will only be shown for non-empty rows.
        actionCol.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<Person, Boolean>, ObservableValue<Boolean>>() {
            @Override
            public ObservableValue<Boolean> call(TableColumn.CellDataFeatures<Person, Boolean> features) {
                return new SimpleBooleanProperty(features.getValue() != null);
            }
        });

        // create a cell value factory with an add button for each row in the table.
        actionCol.setCellFactory(new Callback<TableColumn<Person, Boolean>, TableCell<Person, Boolean>>() {
            @Override
            public TableCell<Person, Boolean> call(TableColumn<Person, Boolean> personBooleanTableColumn) {
                return new AddPersonCell(stage, table);
            }
        });

        table.getColumns().setAll(firstNameCol, lastNameCol, actionCol);
        table.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);

        table.getSelectionModel().getSelectedIndices().addListener(new ListChangeListener() {
            @Override
            public void onChanged(ListChangeListener.Change change) {
                System.out.println("-------------------------");
                System.out.println(change.getList());
                System.out.println("------------------------");
            }
        });

        table.getSelectionModel().getSelectedItems().addListener(new ListChangeListener<Person>() {
            @Override
            public void onChanged(ListChangeListener.Change<? extends Person> change) {
                System.out.println(change.getList());
                VersionInfo info = new VersionInfo();
                System.out.println(info.getRuntimeVersion());
                String version = System.getProperty("java.version");
                System.out.println(version);
                String vendor = System.getProperty("java.vendor.url");
                System.out.println(vendor);

                System.out.println(version);

            }
        });
        System.out.println(table.getItems());
        stage.setScene(new Scene(table));
        stage.show();
    }




    private class AddPersonCell extends TableCell<Person, Boolean> {

        final CheckBox addButton = new CheckBox();
        final StackPane paddedButton = new StackPane();


        AddPersonCell(final Stage stage, final TableView table) {
            paddedButton.setPadding(new Insets(3));
            paddedButton.getChildren().add(addButton);
            addButton.selectedProperty().addListener(new ChangeListener<Boolean>() {
                @Override
                public void changed(ObservableValue<? extends Boolean> ov, Boolean t, Boolean t1) {
                    if (t1) {
                        table.getSelectionModel().select(getTableRow().getIndex());

                        System.out.println(getTableColumn());
                    } else {
                        table.getSelectionModel().clearSelection(getTableRow().getIndex());
                    }
                }
            });

        }

        @Override
        protected void updateItem(Boolean item, boolean empty) {
            super.updateItem(item, empty);
            if (!empty) {
                setContentDisplay(ContentDisplay.GRAPHIC_ONLY);
                setGraphic(paddedButton);
            }
        }


    }
}

PersonClaa.java

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package tableviewwithaddcheckbox;


import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
/**
 *
 * @author reegan
 */


public class Person {
  private StringProperty firstName;
  private StringProperty lastName;

  public Person(String firstName, String lastName) {
    setFirstName(firstName);
    setLastName(lastName);
  }

  public final void setFirstName(String value) { firstNameProperty().set(value); }
  public final void setLastName(String value) { lastNameProperty().set(value); }
  public String getFirstName() { return firstNameProperty().get(); }
  public String getLastName() { return lastNameProperty().get(); }

  public StringProperty firstNameProperty() {
    if (firstName == null) firstName = new SimpleStringProperty(this, "firstName");
    return firstName;
  }
  public StringProperty lastNameProperty() {
    if (lastName == null) lastName = new SimpleStringProperty(this, "lastName");
    return lastName;
  }
}

0 个答案:

没有答案