首先,我在前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 编辑屏幕看起来相同,但应填写字段并能够更改。