带有CSV的JavaFX TableView将数据添加到CSV

时间:2018-05-09 16:20:04

标签: java csv javafx tableview

首先,我在前5页搜索了Google,但我找不到解决问题的方法。

所以我的问题是我有一个包含数据的CSV文件。它连接到我的TableView,因此我的CSV文件的数据填满了表格。

我有一个添加按钮(Toevoegen),一个编辑按钮(Bewerken)和一个删除按钮(Verwijder)。因此可以向表中添加一列并删除一列,但它不会删除或添加到我想要的CSV文件中。

在TextFields的新场景中编辑表格也应该在其中,但我似乎无法解决这个问题......

希望有人可以帮助我,这是我的代码:

Main.java:

import com.sun.prism.impl.Disposer;
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.TilePane;
import javafx.scene.layout.VBox;
import javafx.stage.Modality;
import javafx.stage.Stage;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;


public class Main extends Application
{

    Stage window;
    TextField voornaamInput, achternaamInput;

    private final TableView<Gebruiker> table = new TableView<>();

    private final ObservableList<Gebruiker> dataList
            = FXCollections.observableArrayList();

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

    @Override
    public void start(Stage primaryStage)
    {
        window = primaryStage;
        window.setTitle("JavaFX - Nick van Bruggen");

    //<editor-fold desc="Begin Titel">
    //Begin Titel
        //titelText
        Label titelText = new Label();
        titelText.setText("Welkom bij de JavaFX applicatie van Nick van Bruggen!\n");

        Label titelsubText = new Label();
        titelsubText.setText("Hier kunt u gebruikers toevoegen, bewerken en verwijderen.");

        //Titel layout
        VBox titelLayout = new VBox();
        titelLayout.getChildren().addAll(titelText, titelsubText);

        titelText.setStyle("-fx-font-size: 18px; -fx-text-align: center;");
        titelsubText.setStyle("-fx-font-size: 18px; -fx-text-align: center;");
        titelLayout.setPadding(new Insets(10, 0, 0, 10));
    //Einde Titel
    //</editor-fold>

    //<editor-fold desc="Begin Table">
    //Begin Table
        //Naam column
        TableColumn<Gebruiker, String> voornaamColumn = new TableColumn<>("Voornaam");
        voornaamColumn.setMinWidth(200);
        voornaamColumn.setCellValueFactory(new PropertyValueFactory<>("Voornaam"));

        //Achternaam column
        TableColumn<Gebruiker, String> achternaamColumn = new TableColumn<>("Achternaam");
        achternaamColumn.setMinWidth(200);
        achternaamColumn.setCellValueFactory(new PropertyValueFactory<>("Achternaam"));

        //Table layout
        table.setItems(dataList);
        table.getColumns().addAll(voornaamColumn, achternaamColumn);
//        table = new TableView<>();
//        table.setItems(getGebruiker());
    //Einde Table
    //</editor-fold>

    //<editor-fold desc="Begin Buttons">
    //Buttons

        //Toevoegen Alert box
        Button toevoegButton = new Button("Toevoegen");
        toevoegButton.setOnAction(new EventHandler<ActionEvent>() {

              @Override
              public void handle(ActionEvent event) {

                  //titelLayout
                  Label titelLabel = new Label();
                  titelLabel.setText("Hier kunt u gebruikers toevoegen");

                  HBox titelLayout = new HBox();
                  titelLayout.setPadding(new Insets(10, 10, 10, 10));
                  titelLayout.getChildren().add(titelLabel);

                  //naamInput
                  voornaamInput = new TextField();
                  voornaamInput.setPromptText("Voornaam");
                  voornaamInput.setMinWidth(100);

                  //naamInput
                  achternaamInput = new TextField();
                  achternaamInput.setPromptText("Achternaam");
                  achternaamInput.setMinWidth(100);

                  VBox inputLayout = new VBox(10);
                  inputLayout.setPadding(new Insets(10, 10, 10, 10));
                  inputLayout.getChildren().addAll(voornaamInput, achternaamInput);

                  //buttonLayout
                  Button saveButton = new Button("Save");
                  saveButton.setOnAction(e -> saveButtonAddClicked());

                  //VBox Layout
                  HBox buttonLayout = new HBox(10);
                  buttonLayout.setPadding(new Insets(10, 10, 10, 10));
                  buttonLayout.getChildren().add(saveButton);
                  buttonLayout.setAlignment(Pos.CENTER);

                  //borderPane
                  //BorderPane layout
                  BorderPane borderPaneToevoegen = new BorderPane();
                  borderPaneToevoegen.setTop(titelLayout);
                  borderPaneToevoegen.setBottom(buttonLayout);
                  borderPaneToevoegen.setCenter(inputLayout);

                  Scene secondScene = new Scene(borderPaneToevoegen, 600, 400);

                  // New window (Stage)
                  Stage newWindow = new Stage();
                  newWindow.setTitle("JavaFX - Toevoegen");
                  newWindow.setScene(secondScene);

                  // Specifies the modality for new window.
                  newWindow.initModality(Modality.WINDOW_MODAL);

                  // Specifies the owner Window (parent) for new window
                  newWindow.initOwner(primaryStage);

                  // Set position of second window, related to primary window.
                  newWindow.setX(primaryStage.getX() + 200);
                  newWindow.setY(primaryStage.getY() + 100);

                  newWindow.show();

              }
        });

        //Bewerken Alert box
        Button bewerkButton = new Button("Bewerken");
        bewerkButton.setOnAction(new EventHandler<ActionEvent>() {

            @Override
            public void handle(ActionEvent event) {

                //titelLayout
                Label titelLabel = new Label();
                titelLabel.setText("Hier kunt u gebruikers bewerken");

                HBox titelLayout = new HBox();
                titelLayout.setPadding(new Insets(10, 10, 10, 10));
                titelLayout.getChildren().add(titelLabel);

                //inputLayout
                TextField voornaamInput, achternaamInput;

                //naamInput
                voornaamInput = new TextField();
                voornaamInput.setPromptText("Voornaam");
                voornaamInput.setMinWidth(100);

                //naamInput
                achternaamInput = new TextField();
                achternaamInput.setPromptText("Achternaam");
                achternaamInput.setMinWidth(100);

                VBox inputLayout = new VBox(10);
                inputLayout.setPadding(new Insets(10, 10, 10, 10));
                inputLayout.getChildren().addAll(voornaamInput, achternaamInput);

                //buttonLayout
                Button saveButton = new Button("Save");
                saveButton.setOnAction(e -> saveButtonEditClicked());


        //      HBox Layout
                HBox buttonLayout = new HBox(10);
                buttonLayout.setPadding(new Insets(10, 10, 10, 10));
                buttonLayout.getChildren().add(saveButton);
                buttonLayout.setAlignment(Pos.CENTER);

                //borderPane
                //BorderPane layout
                BorderPane borderPaneBewerken = new BorderPane();
                borderPaneBewerken.setTop(titelLayout);
                borderPaneBewerken.setBottom(buttonLayout);
                borderPaneBewerken.setCenter(inputLayout);

                Scene secondScene = new Scene(borderPaneBewerken, 600, 400);

                // New window (Stage)
                Stage newWindow = new Stage();
                newWindow.setTitle("JavaFX - Bewerken");
                newWindow.setScene(secondScene);

                // Specifies the modality for new window.
                newWindow.initModality(Modality.WINDOW_MODAL);

                // Specifies the owner Window (parent) for new window
                newWindow.initOwner(primaryStage);

                // Set position of second window, related to primary window.
                newWindow.setX(primaryStage.getX() + 200);
                newWindow.setY(primaryStage.getY() + 100);

                newWindow.show();
            }
        });

        Button verwijderButton = new Button("Verwijder");
        verwijderButton.setOnAction(e -> verwijderButtonClicked());
        TilePane buttonLayout = new TilePane();
        buttonLayout.setPrefWidth(100);

        //Button style
        toevoegButton.setStyle("-fx-border-color: black;");
        bewerkButton.setStyle("-fx-border-color: black;");
        verwijderButton.setStyle("-fx-border-color: black;");

        toevoegButton.setMaxWidth(buttonLayout.getPrefWidth());
        bewerkButton.setMaxWidth(buttonLayout.getPrefWidth());
        verwijderButton.setMaxWidth(buttonLayout.getPrefWidth());

        buttonLayout.setHgap(5.0);

        buttonLayout.setPadding(new Insets(10, 10, 10, 10));
        buttonLayout.getChildren().addAll(toevoegButton, bewerkButton, verwijderButton);
        //Einde buttons
    //</editor-fold>

        //BorderPane layout
        BorderPane borderPane = new BorderPane();
        borderPane.setTop(titelLayout);
        borderPane.setBottom(buttonLayout);
        borderPane.setCenter(table);

        //Scene
        Scene scene = new Scene(borderPane, 1260, 600);
        window.setScene(scene);
        window.show();

        readCSV();

    }


//    CSV bestand lezen
    private void readCSV() {

        String CsvFile = "src/gebruikers.csv";
        String FieldDelimiter = ",";

        BufferedReader br;

        try {
            br = new BufferedReader(new FileReader(CsvFile));

            String line;
            while ((line = br.readLine()) != null) {
                String[] fields = line.split(FieldDelimiter, -1);

                Gebruiker gebruiker = new Gebruiker(fields[0], fields[1]);
                dataList.add(gebruiker);
            }

        } catch (FileNotFoundException ex) {
            Logger.getLogger(Main.class.getName())
                    .log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(Main.class.getName())
                    .log(Level.SEVERE, null, ex);
        }

    }


    //Table gebruikers
//    public ObservableList<Gebruiker> getGebruiker()
//    {
//        ObservableList<Gebruiker> gebruikers = FXCollections.observableArrayList();
//        gebruikers.add(new Gebruiker("Nick", "van Bruggen"));
//        gebruikers.add(new Gebruiker("Daan", "van Bruggen"));
//        gebruikers.add(new Gebruiker("Wim", "Pietje"));
//        return gebruikers;
//    }

//    Save button bij toevoegen
    public void saveButtonAddClicked()
    {
        Gebruiker gebruiker = new Gebruiker();
        gebruiker.setVoornaam(voornaamInput.getText());
        gebruiker.setAchternaam(achternaamInput.getText());
        table.getItems().add(gebruiker);

        voornaamInput.clear();
        achternaamInput.clear();
    }

//    Save button bij bewerken
//TODO bewerken kan nog niet
    public void saveButtonEditClicked()
    {
        Gebruiker gebruiker = new Gebruiker();
        gebruiker.setVoornaam(voornaamInput.getText());
        table.getItems().add(gebruiker);

    }

//    Verwijder button
    public void verwijderButtonClicked()
    {
        ObservableList<Gebruiker> gebruikerSelected, allGebruikers;
        allGebruikers = table.getItems();
        gebruikerSelected = table.getSelectionModel().getSelectedItems();

        gebruikerSelected.forEach(allGebruikers::remove);
    }



}

Gebruiker.java

import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;

import java.util.Date;

public class Gebruiker
{

    private String voornaam;
    private String achternaam;

    public Gebruiker(){
        this.voornaam = "";
        this.achternaam = "";
    }

    public Gebruiker(String voornaam, String achternaam){
        this.voornaam = voornaam;
        this.achternaam = achternaam;
    }

    public String getVoornaam() {
        return voornaam;
    }

    public void setVoornaam(String voornaam) {
        this.voornaam = voornaam;
    }

    public String getAchternaam() {
        return achternaam;
    }

    public void setAchternaam(String achternaam) {
        this.achternaam = achternaam;
    }
}

CSV文件 documentation “添加”场景看起来如何 CSV file 编辑屏幕看起来相同,但应填写字段并能够更改。

0 个答案:

没有答案