首页 > 解决方案 > 编辑 JavaFX 表中的数据

问题描述

我仍在学习 Java 和 JavaFX,我已经知道如何读取包含原始数据的 CSV 文件并将其输入到我的表中。我的问题是如何允许用户编辑/更新/删除单元格并保存以反映更新?任何帮助将不胜感激。

主.java

public class Main extends Application {

private final TableView<Asset> tableView = new TableView<>();

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

private void readCSV() {

    String csvFile = "assets.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);

            Asset assets = new Asset(fields[0], fields[1], fields[2],
                    fields[3], fields[4], fields[5]);
            dataList.add(assets);

        }

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

}

@Override
public void start(Stage primaryStage) {
    primaryStage.setTitle("Asset Management System");

    tableView.setEditable(true);

    Group root = new Group();

    TableColumn columnF1 = new TableColumn("AssetIDNumber");
    columnF1.setCellValueFactory(new PropertyValueFactory<>("f1"));

    TableColumn columnF2 = new TableColumn("AssetName");
    columnF2.setCellValueFactory(new PropertyValueFactory<>("f2"));

    TableColumn columnF3 = new TableColumn("AssetType");
    columnF3.setCellValueFactory(new PropertyValueFactory<>("f3"));

    TableColumn columnF4 = new TableColumn("AssetLocation");
    columnF4.setCellValueFactory(new PropertyValueFactory<>("f4"));

    TableColumn columnF5 = new TableColumn("UsedBy");
    columnF5.setCellValueFactory(new PropertyValueFactory<>("f5"));

    TableColumn columnF6 = new TableColumn("AssetState");
    columnF6.setCellValueFactory(new PropertyValueFactory<>("f6"));

    tableView.setItems(dataList);
    tableView.getColumns().addAll(columnF1, columnF2, columnF3, columnF4, columnF5, columnF6);



    VBox vBox = new VBox();
    vBox.setSpacing(10);
    vBox.getChildren().add(tableView);

    root.getChildren().add(vBox);

    primaryStage.setScene(new Scene(root, 482, 250));
    primaryStage.show();

    readCSV();
}


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

资产.java

public class Asset {

private SimpleStringProperty f1, f2, f3, f4, f5, f6;

Asset(String f1, String f2, String f3, String f4,
      String f5, String f6) {
    this.f1 = new SimpleStringProperty(f1);
    this.f2 = new SimpleStringProperty(f2);
    this.f3 = new SimpleStringProperty(f3);
    this.f4 = new SimpleStringProperty(f4);
    this.f5 = new SimpleStringProperty(f5);
    this.f6 = new SimpleStringProperty(f6);
}

public String getF1() {
    return f1.get();
}

public String getF2() {
    return f2.get();
}

public String getF3() {
    return f3.get();
}

public String getF4() {
    return f4.get();
}

public String getF5() {
    return f5.get();
}

public String getF6() {
    return f6.get();
}

}

我再次尝试允许用户对表格进行编辑并保存编辑,因为我最终需要用更新的数据写回 CSV 文件。

标签: javajavafx

解决方案


推荐阅读