Lista zakupów - tablica ObservableList.

0

Cześć wszystkim, próbuję zrobić prosty program to tworzenia listy zakupów, a następnie zapisania jej do pliku .txt, lecz mam problem w postaci takiej, że po odpaleniu programu lista jest pusta, choć wygląda na to, że coś się do niej dodaje bo mogę dodawać i usuwać zaznaczone wiersze. Chciałbym was prosić o pomoc w odnalezieniu błędu.

import javafx.scene.*;
import javafx.scene.control.Button;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.geometry.Insets;

import javafx.stage.Stage;

public class Main extends Application {

	Stage okno;
	TableView<Produkt> tabela;
	TextField nazwaWejscie, iloscWejscie;

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

	@SuppressWarnings("unchecked")
	@Override
	public void start(Stage primaryStage) throws Exception {
		okno = primaryStage;
		okno.setTitle("Stwórz listę zakupów");

		// Kolumna nazwa
		TableColumn<Produkt, String> kolumnaNazwa = new TableColumn<>("Name");
		kolumnaNazwa.setMinWidth(200);
		kolumnaNazwa.setCellValueFactory(new PropertyValueFactory<>("name"));

		// Kolumna ilosc
		TableColumn<Produkt, Double> kolumnaIlosc = new TableColumn<>("Price");
		kolumnaIlosc.setMinWidth(100);
		kolumnaIlosc.setCellValueFactory(new PropertyValueFactory<>("price"));

		// Wprowadź nazwę
		nazwaWejscie = new TextField();
		nazwaWejscie.setPromptText("Nazwa");
		nazwaWejscie.setMinWidth(100);

		// Wprowadź ilość
		iloscWejscie = new TextField();
		iloscWejscie.setPromptText("Ilość");

		// Przyciski
		Button dodaj = new Button("Dodaj");
		dodaj.setOnAction(e -> kliknijDodaj());
		Button usun = new Button("Usuń");
		usun.setOnAction(e -> kliknijUsun());
		// Button stworzListe = new Button("Zapisz listę");
		// stworzListe.setOnAction(e -> zapiszListe());

		HBox pojemnik = new HBox();
		pojemnik.setPadding(new Insets(10, 10, 10, 10));
		pojemnik.setSpacing(10);
		// wstaw pola i przyciski w jeden rząd
		pojemnik.getChildren().addAll(nazwaWejscie, iloscWejscie, dodaj, usun);

		tabela = new TableView<>();
		tabela.setItems(getProdukt());
		tabela.getColumns().addAll(kolumnaNazwa, kolumnaIlosc);

		VBox vBox = new VBox();
		vBox.getChildren().addAll(tabela, pojemnik);

		Scene scena = new Scene(vBox);
		okno.setScene(scena);
		okno.show();
	}

	// Funkcja dodania produktu
	public void kliknijDodaj() {
		Produkt Produkt = new Produkt();
		Produkt.setNazwa(nazwaWejscie.getText());
		Produkt.setIlosc(Double.parseDouble(iloscWejscie.getText()));
		tabela.getItems().add(Produkt);
		nazwaWejscie.clear();
		iloscWejscie.clear();
	}

	// Funkcja usunięcia produktu
	public void kliknijUsun() {
		ObservableList<Produkt> ProduktWybrany, wszystkieProdukty;
		wszystkieProdukty = tabela.getItems();
		ProduktWybrany = tabela.getSelectionModel().getSelectedItems();

		ProduktWybrany.forEach(wszystkieProdukty::remove);
	}

	// Funkcja dodania listy do pliku
	// public void zapiszListe(){
	//
	// }

	public ObservableList<Produkt> getProdukt() {
		ObservableList<Produkt> produkty = FXCollections.observableArrayList();
		produkty.add(new Produkt("Jajka", 10));
		produkty.add(new Produkt("Szynka", 0.5));
		return produkty;
	}
}
public class Produkt {

	private String nazwa;
    private double ilosc;

    public Produkt(){
        this.nazwa = "";
        this.ilosc = 0;
    }

    public Produkt(String nazwa, double ilosc){
        this.nazwa = nazwa;
        this.ilosc = ilosc;
    }

    public String getNazwa() {
        return nazwa;
    }

    public void setNazwa(String nazwa) {
        this.nazwa = nazwa;
    }

    public double getIlosc() {
        return ilosc;
    }

    public void setIlosc(double ilosc) {
        this.ilosc = ilosc;
    }
}

user image

1

Zamiast:

kolumnaNazwa.setCellValueFactory(new PropertyValueFactory<>("name"));

powinno być:

kolumnaNazwa.setCellValueFactory(new PropertyValueFactory<>("nazwa"));

i odpowiednio zamiast price powinno być ilosc (nie wiem czy wiesz ale price w języku angielskim niekoniecznie znaczy ilość).

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