mercredi 25 mai 2016

JavaFx Tableview selesct only one checkbox

Hi i create Tableview with checkbox column for data from my database. Now i can selcet even all checkbox in table. But I need to change it was possible to select only one checkbox and assign a index to variable.

Here is my code:

This is my data model

        private Temat_model() {

        this._zaznaczony = new SimpleBooleanProperty();

        this._nr_Tematu = new SimpleStringProperty();

        this.Temat = new SimpleStringProperty();

        this._Zarezerwowany = new SimpleStringProperty();
       // this._zaznaczony= new SimpleBooleanProperty(false);
        this._zaznaczony.addListener(new ChangeListener<Boolean>() {

            public void changed(ObservableValue<? extends Boolean> ov, Boolean t, Boolean t1) {

                System.out.println( " select: " + t1);


            }

        });

    }

    public BooleanProperty _zaznaczonyProperty() {
        return _zaznaczony;
    }

    public StringProperty _nr_TematuProperty() {
        return _nr_Tematu;
    }

    public StringProperty _TematProperty() {
        return Temat;
    }

    public StringProperty _ZarezerwowanyProperty() {
        return _Zarezerwowany;
    }
    public void setZaznaczony(boolean zaznacz) {
        this._zaznaczony.set(zaznacz);
    }
    public void setTemat(String _nr_Tematu) {
        this.Temat.set(_nr_Tematu);
    }

    public void set_Data(Integer num, String data) {

        this._zaznaczony.set(false);

        if (num == 0) {
            this.Temat.set(data);
        } else if (num == 1) {
            this._nr_Tematu.set(data);
        } else if (num == 2) {
            this._Zarezerwowany.set(data);
        }
    }

    public void set_nr_Tematu(String _nr_Tematu) {
        this._nr_Tematu.set(_nr_Tematu);
    }

    public void set_Zarezerwowany(String _Zarezerwowany) {
        this._Zarezerwowany.set(_Zarezerwowany);
    }

}

there is code for create tableview column

final ObservableList<Temat_model> data = FXCollections.observableArrayList();

    TableColumn zaznaczonyCol = new TableColumn<Temat_model, Boolean>();

    zaznaczonyCol.setText("Zaznaczony");

    zaznaczonyCol.setMinWidth(50);

    zaznaczonyCol.setCellValueFactory(new PropertyValueFactory("_zaznaczony"));

    zaznaczonyCol.setCellFactory(new Callback<TableColumn<Temat_model, Boolean>, TableCell<Temat_model, Boolean>>() {

        public TableCell<Temat_model, Boolean> call(TableColumn<Temat_model, Boolean> p) {

            return new CheckBoxTableCell<Temat_model, Boolean>();

        }

    });

    TableColumn nr_tematuCol = new TableColumn<Temat_model, String>();

    nr_tematuCol.setText("Lp");

    nr_tematuCol.setCellValueFactory(new PropertyValueFactory<Temat_model, String>("_nr_Tematu"));

    TableColumn tematCol = new TableColumn<Temat_model, String>();

    tematCol.setText("Temat");

    tematCol.setCellValueFactory(new PropertyValueFactory<Temat_model, String>("_Temat"));

    TableColumn zarezerwowanyCol = new TableColumn<Temat_model, String>();
    zarezerwowanyCol.setText("Zajety");
    zarezerwowanyCol.setMinWidth(200);
    zarezerwowanyCol.setCellValueFactory(new PropertyValueFactory<Temat_model, String>("_Zarezerwowany"));

    Callback<TableColumn, TableCell> cellFactory
            = new Callback<TableColumn, TableCell>() {
        public TableCell call(TableColumn p) {
            return new EditingCell();
        }
    };
    zarezerwowanyCol.setCellFactory(cellFactory);
    nr_tematuCol.setCellFactory(cellFactory);
    tematCol.setCellFactory(cellFactory);
    //Set handler to update ObservableList properties. Applicable if cell is edited
    updateObservableListProperties(zarezerwowanyCol, nr_tematuCol, tematCol);
    //Enabling editing
    tableview.setEditable(true);
    tableview.getColumns().addAll(zaznaczonyCol, nr_tematuCol, tematCol, zarezerwowanyCol);

My chceckbox tabllecell class with i use to create check box in table

  public static class CheckBoxTableCell<S, T> extends TableCell<S, T> {

    private final  CheckBox checkBox;

    private ObservableValue<T> ov;

    public CheckBoxTableCell() {

        this.checkBox = new CheckBox();

        this.checkBox.setAlignment(Pos.CENTER);

        setAlignment(Pos.CENTER);

        setGraphic(checkBox);


    }

    @Override
    public void updateItem(T item, boolean empty) {

        super.updateItem(item, empty);

        if (empty) {

            setText(null);

            setGraphic(null);

        } else {

            setGraphic(checkBox);

            if (ov instanceof BooleanProperty) {

                checkBox.selectedProperty().unbindBidirectional((BooleanProperty) ov);

            }

            ov = getTableColumn().getCellObservableValue(getIndex());

            if (ov instanceof BooleanProperty) {

                checkBox.selectedProperty().bindBidirectional((BooleanProperty) ov);

            }

        }

    }



}




Aucun commentaire:

Enregistrer un commentaire