Import/Export do xlsx

0

Cześć

Potrzebuje pomocy aby dane z tabeli w JavieFX które dodaje zapisać do pliku dane.xlsx w projekcie a przy otwarciu ponownym apki je wczytywało.
Wszędzie gdzie patrzę na stronach obsługa odbywa się za pomocą przycisku.
Jeżeli chodzi o zapis ok może odbywać się za pomocą przycisku i nadpisywać plik z nowymi danymi, lecz odczyt chciałbym aby odbywał się po załadowaniu automatycznie okna z tabelą.
Dodam że projekt jest w mavenie i wtyczkę POI mam już podpiętą pod pom-a.

wrzucam mój controller od okna:

package sample.Controllers;

import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.*;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.control.cell.TextFieldTableCell;
import sample.Utils.StopLista;
import java.net.URL;
import java.util.ResourceBundle;


public class StopController implements Initializable {




    @FXML
    private TableView<StopLista> tableView;
    @FXML
    private TableColumn<StopLista, String> dateColumn;
    @FXML
    private TableColumn<StopLista, String> orderColumn;
    @FXML
    private TableColumn<StopLista, String> modelColumn;
    @FXML
    private TableColumn<StopLista, String> changeColumn;
    @FXML
    private TableColumn<StopLista, String> timeColumn;
    @FXML
    private TableColumn<StopLista, String> personColumn;
    @FXML
    private TableColumn<StopLista, String> commentsColumn;


    @FXML
    TextField dateText;
    @FXML
    TextField orderText;
    @FXML
    TextField modelText;
    @FXML
    TextField changeText;
    @FXML
    TextField timeText;
    @FXML
    TextField personText;
    @FXML
    TextField commentsText;

    public StopController() {
    }


    @Override
    public void initialize(URL location, ResourceBundle resources) {
        dateColumn.setCellValueFactory(new PropertyValueFactory<StopLista, String>("data"));
        orderColumn.setCellValueFactory(new PropertyValueFactory<StopLista, String>("zlecenie"));
        modelColumn.setCellValueFactory(new PropertyValueFactory<StopLista, String>("model"));
        changeColumn.setCellValueFactory(new PropertyValueFactory<StopLista, String>("zmiana"));
        timeColumn.setCellValueFactory(new PropertyValueFactory<StopLista, String>("czas"));
        personColumn.setCellValueFactory(new PropertyValueFactory<StopLista, String>("osoba"));
        commentsColumn.setCellValueFactory(new PropertyValueFactory<StopLista, String>("uwagi"));
        tableView.setItems(addList());



        tableView.setEditable(true);
        dateColumn.setCellFactory(TextFieldTableCell.forTableColumn());
        orderColumn.setCellFactory(TextFieldTableCell.forTableColumn());
        modelColumn.setCellFactory(TextFieldTableCell.forTableColumn());
        changeColumn.setCellFactory(TextFieldTableCell.forTableColumn());
        timeColumn.setCellFactory(TextFieldTableCell.forTableColumn());
        personColumn.setCellFactory(TextFieldTableCell.forTableColumn());
        commentsColumn.setCellFactory(TextFieldTableCell.forTableColumn());


    }

    public void addRowToTable() {
        StopLista nowyRekord = new StopLista(dateText.getText(), orderText.getText(), modelText.getText(),
                changeText.getText(), timeText.getText(), personText.getText(), commentsText.getText());
        tableView.getItems().add(nowyRekord);


        dateText.clear();
        orderText.clear();
        modelText.clear();
        changeText.clear();
        timeText.clear();
        personText.clear();
        commentsText.clear();
    }

    public void delateRowTable() {
        ObservableList<StopLista> wybranyRekord, wszystkieRekordy;
        try {
            wszystkieRekordy = tableView.getItems();
            if (wszystkieRekordy.size() != 0) {
                wybranyRekord = tableView.getSelectionModel().getSelectedItems();
                wybranyRekord.forEach(wszystkieRekordy::remove);
            }
        } catch (Exception e) {
            //tabela jest pusta - nic się nie dzieje
        }

    }

    public ObservableList<StopLista> addList() {
        ObservableList<StopLista> orderList = FXCollections.observableArrayList();





        return orderList;
    }

    public void editData(TableColumn.CellEditEvent cellEditEvent){
        StopLista zmDaty = tableView.getSelectionModel().getSelectedItem();
        zmDaty.setData(cellEditEvent.getNewValue().toString());


    }

    public void editOrder(TableColumn.CellEditEvent cellEditEvent){
        StopLista zmZlecenia = tableView.getSelectionModel().getSelectedItem();
        zmZlecenia.setZlecenie(cellEditEvent.getNewValue().toString());


    }

    public void editModel(TableColumn.CellEditEvent cellEditEvent){
        StopLista zmModelu = tableView.getSelectionModel().getSelectedItem();
        zmModelu.setModel(cellEditEvent.getNewValue().toString());


    }

    public void editChange(TableColumn.CellEditEvent cellEditEvent){
        StopLista zmZmiany = tableView.getSelectionModel().getSelectedItem();
        zmZmiany.setZmiana(cellEditEvent.getNewValue().toString());


    }

    public void editTime(TableColumn.CellEditEvent cellEditEvent){
        StopLista zmCzasu = tableView.getSelectionModel().getSelectedItem();
        zmCzasu.setCzas(cellEditEvent.getNewValue().toString());


    }

    public void editPerson(TableColumn.CellEditEvent cellEditEvent){
        StopLista zmOsoby = tableView.getSelectionModel().getSelectedItem();
        zmOsoby.setOsoba(cellEditEvent.getNewValue().toString());


    }

    public void editComments(TableColumn.CellEditEvent cellEditEvent){
        StopLista zmUwag = tableView.getSelectionModel().getSelectedItem();
        zmUwag.setUwagi(cellEditEvent.getNewValue().toString());


    }


}

PS. jak wskazuje plik mam podpięte jeszcze w innej klasie konstruktory, gettery i settery żeby nie było że nie wrzucam całości.

0

Nie myśl w tem sposób "zapis XLS za pomocą przycisku" ani "zapis FX Table do XLS"
Myśl: "zapis do XLS danych będących zapleczem (źródłem, modelem) dla Table"

0

Ok czy ktoś z was może podesłać mi odnośnik do podobnego projektu?
Potrzebuje tylko podgląd jak jest to rozwiązywane.

0
Gitesik napisał(a):

Ok czy ktoś z was może podesłać mi odnośnik do podobnego projektu?
Potrzebuje tylko podgląd jak jest to rozwiązywane.

A jak eksport nie będzie z przycisku, to jest podobny projekt?

Nie wiem w jakich słowach do Ciebie dotrzeć: divide at impera, dziel i rządź. Podziel swoje zagadnienie na pod-problemy
a) tabelaryczne źródło danych
b) eksport
c) nieszczęsny przycisk

W którym obszarze masz problem?
Oznaczyłeś tagiem POI, ale nie widzę żebyś używał.
Na marginesie: najprostszym formatem, który jest kompatybilny z Excellem, jest plik tekstowy CSV, w którym separatorem jest np. tabulator, nie wymaga żadnej biblioteki.

Szersza refleksja: rośnie pokolenie wannabe programistów, w których całą ta sfera internetowa z googlem na czele zabiła zdolność rozwiązywania problemów (dekompozycja to elementarz). Jak nie znajdziecie identycznego problemu w googlu, nie umiecie rozwiązać

1 użytkowników online, w tym zalogowanych: 0, gości: 1