组合框和可观察的列表代码出现问题

时间:2019-03-26 09:15:30

标签: javafx combobox observablelist

很抱歉,如果我的英语不太好,但是我是法语,我真的需要帮助解决我的代码问题。 说明:我想从1个组合框和2个文本字段中将3个值放入我的可观察列表中。文本字段的文本正在获取,但是由于我创建了组合框,因此没有任何值添加到列表中。你能帮我吗 ? (我把我的代码放在下面):) Cordialy

import javafx.application.Application;
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.ComboBox;
import javafx.scene.control.Label;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableColumn.CellEditEvent;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.scene.control.cell.ComboBoxTableCell;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.control.cell.TextFieldTableCell;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Pane;
import javafx.scene.layout.VBox;
import javafx.scene.text.Font;
import javafx.stage.Stage;


public class Tableviewex extends Application {

private TableView<Person> table = new TableView<>();
private ObservableList<Person> data =
        FXCollections.observableArrayList();
private ObservableList<String> listproduit = FXCollections.observableArrayList("Doliprane","Spasfon");
private Pane layout = new Pane();
private 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.setTitle("Table View Sample");
    stage.setWidth(450);
    stage.setHeight(550);

    final Label label = new Label("Choisissez vos médicaments");
    label.setFont(new Font("Arial", 20));

    table.setEditable(true);

    TableColumn<Person, String> produitcol = 
        new TableColumn<>("Produit");
    produitcol.setMinWidth(100);
    produitcol.setCellValueFactory(
        new PropertyValueFactory<>("produit"));



   produitcol.setCellFactory(TextFieldTableCell.<Person>forTableColumn());
    produitcol.setOnEditCommit(
        (CellEditEvent<Person, String> t) -> {
            ((Person) t.getTableView().getItems().get(
                t.getTablePosition().getRow())
                ).setFirstName(t.getNewValue());
    });


    TableColumn<Person, String> lastNameCol = 
        new TableColumn<>("Quantité");
    lastNameCol.setMinWidth(100);
    lastNameCol.setCellValueFactory(
        new PropertyValueFactory<>("quantité"));
   lastNameCol.setCellFactory(TextFieldTableCell.<Person>forTableColumn());
   lastNameCol.setOnEditCommit(
        (CellEditEvent<Person, String> t) -> {
            ((Person) t.getTableView().getItems().get(
                    t.getTablePosition().getRow())
                    ).setLastName(t.getNewValue());
    });

    TableColumn<Person, String> emailCol = new TableColumn<>("Prix");
    emailCol.setMinWidth(200);
    emailCol.setCellValueFactory(
        new PropertyValueFactory<>("prix"));
    emailCol.setCellFactory(TextFieldTableCell.<Person>forTableColumn());       
    emailCol.setOnEditCommit(
        (CellEditEvent<Person, String> t) -> {
            ((Person) t.getTableView().getItems().get(
                    t.getTablePosition().getRow())
                    ).setEmail(t.getNewValue());
    });

    table.setItems(data);
    table.getColumns().addAll(produitcol, lastNameCol, emailCol);

    final ComboBox<String> choixproduit = new ComboBox<>();
    choixproduit.setItems(listproduit);
    choixproduit.setPromptText("Choissisez votre produit");
    choixproduit.setMaxWidth(produitcol.getPrefWidth());
    final TextField addLastName = new TextField();
    addLastName.setMaxWidth(lastNameCol.getPrefWidth());
    addLastName.setPromptText("Quantité");
    final TextField addEmail = new TextField();
    addEmail.setMaxWidth(emailCol.getPrefWidth());
    addEmail.setPromptText("Prix");

    final Button addButton = new Button("Ajouter");
    addButton.setOnAction((ActionEvent e) -> {
        data.add(new Person(
                choixproduit.getValue(),
                addLastName.getText(),
                addEmail.getText()));
        //addFirstName.clear();
        addLastName.clear();
        addEmail.clear();
    });

    hb.getChildren().addAll(choixproduit, addLastName, addEmail, addButton);
    hb.setSpacing(3);

    final VBox vbox = new VBox();
    vbox.setSpacing(5);
    vbox.setPadding(new Insets(10, 0, 0, 10));
    vbox.getChildren().addAll(label, table, hb);

    ((Group) scene.getRoot()).getChildren().addAll(vbox);
    layout.setStyle("-fx-background-color: linear-gradient(to top, #24B400, #FFFFFF)");

    stage.setScene(scene);
    stage.show();
}

public static class Person {

    private final SimpleStringProperty produit;
    private final SimpleStringProperty quantité;
    private final SimpleStringProperty prix;

    private Person(String fName, String lName, String email) {
        this.produit = new SimpleStringProperty(fName);
        this.quantité = new SimpleStringProperty(lName);
        this.prix = new SimpleStringProperty(email);
    }

    public String getFirstName() {
        return produit.get();
    }

    public void setFirstName(String fName) {
        produit.set(fName);
    }

    public String getLastName() {
        return quantité.get();
    }

    public void setLastName(String fName) {
        quantité.set(fName);
    }

    public String getEmail() {
        return prix.get();
    }

    public void setEmail(String fName) {
        prix.set(fName);
    }
}

}

0 个答案:

没有答案