Quantcast
Channel: Forum Pasja Informatyki - Najnowsze pytania bez odpowiedzi
Viewing all articles
Browse latest Browse all 21942

Zapisywanie formatu Json z listy do pliku JavaFX

$
0
0

Robię projekt w JavieFX i mam problem, który polega na tym, że MainController nie otrzymuje zaaktualizowanej listy z AddControllera. Albo po prostu AddController nie zwraca prawidłowo listy i jsonObject. Zaimplementowałem przy dodawaniu obiektu do listy, żeby zamieniał obiekty na format json, aby zapisać je potem w pliku jako tekst. Prawidłowo dodaje obiekty do listy, bo pokazuje mi je w TableView i potem prawidłowo konwertuje obiekty na jsonObject, bo sprawdziłem w konsoli. Niestety, przy zapisie jsonObject jest pusty. Próbowałem to robić na kilka sposobów, ale już nie mam pomysłu. Może ktoś tutaj zauważy gdzie popełniam błąd.

public class MainController implements Initializable {

	@FXML MenuItem addF;
	@FXML MenuItem editF;
	@FXML MenuItem deleteF;


	@FXML protected TableView<Person> person = new TableView<Person>();
	@FXML private TableColumn<Person, String> nameCol;
	@FXML private TableColumn<Person, String> surnameCol;
	@FXML private TableColumn<Person, String> ageCol;
	@FXML private TableColumn<Person, String> sexCol;
	@FXML private TableColumn<Person, String> locCol;

	@FXML
	protected static ObservableList<Person> data = FXCollections.observableArrayList(
			new Person("seba","miko","20","inne","Milicz"
					 )
			);

    protected static ArrayList<Person> list = new ArrayList<Person>();
	private String jsonObject;

	  @Override
	  public void initialize(URL location, ResourceBundle resources){


		  	person.setEditable(true);
		    nameCol.setCellValueFactory(new PropertyValueFactory<Person, String>("Name"));
		    nameCol.setCellFactory(TextFieldTableCell.forTableColumn());
		    nameCol.setOnEditCommit(
		        new EventHandler<CellEditEvent<Person, String>>() {
		            @Override
		            public void handle(CellEditEvent<Person, String> t) {
		                ((Person) t.getTableView().getItems().get(
		                    t.getTablePosition().getRow())
		                    ).setName(t.getNewValue());
		            }
		        }
		    );
		    surnameCol.setCellValueFactory(new PropertyValueFactory<Person, String>("Surname"));
		    surnameCol.setCellFactory(TextFieldTableCell.forTableColumn());
		    surnameCol.setOnEditCommit(
		        new EventHandler<CellEditEvent<Person, String>>() {
		            @Override
		            public void handle(CellEditEvent<Person, String> t) {
		                ((Person) t.getTableView().getItems().get(
		                    t.getTablePosition().getRow())
		                    ).setSurname(t.getNewValue());
		            }
		        }
		    );
		    ageCol.setCellValueFactory(new PropertyValueFactory<Person, String>("Age"));
		    ageCol.setCellFactory(TextFieldTableCell.forTableColumn());
		    ageCol.setOnEditCommit(
		        new EventHandler<CellEditEvent<Person, String>>() {
		            @Override
		            public void handle(CellEditEvent<Person, String> t) {
		                ((Person) t.getTableView().getItems().get(
		                    t.getTablePosition().getRow())
		                    ).setAge(t.getNewValue());
		            }
		        }
		    );
		    sexCol.setCellValueFactory(new PropertyValueFactory<Person, String>("Sex"));
		    sexCol.setCellFactory(TextFieldTableCell.forTableColumn());
		    sexCol.setOnEditCommit(
		        new EventHandler<CellEditEvent<Person, String>>() {
		            @Override
		            public void handle(CellEditEvent<Person, String> t) {
		                ((Person) t.getTableView().getItems().get(
		                    t.getTablePosition().getRow())
		                    ).setSex(t.getNewValue());
		            }
		        }
		    );
		    locCol.setCellValueFactory(new PropertyValueFactory<Person, String>("Location"));
		    locCol.setCellFactory(TextFieldTableCell.forTableColumn());
		    locCol.setOnEditCommit(
		        new EventHandler<CellEditEvent<Person, String>>() {
		            @Override
		            public void handle(CellEditEvent<Person, String> t) {
		                ((Person) t.getTableView().getItems().get(
		                    t.getTablePosition().getRow())
		                    ).setLocation(t.getNewValue());
		            }
		        }
		    );
		  	try {
				readList(list);
			} catch (IOException | ClassNotFoundException e) {
				e.printStackTrace();
			}
		  	data.addAll(list);

			person.setItems(data);
			person.refresh();
	  }

	 @FXML
	 public void addA(ActionEvent event) throws Exception {
	            Stage primaryStage2 = new Stage();
				Parent root2 = FXMLLoader.load(getClass().getResource("\\Add.fxml"));
				Scene scene2 = new Scene(root2);
				scene2.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
				primaryStage2.setScene(scene2);
				primaryStage2.show();
		 }

	 @FXML
	 public void editA(ActionEvent event) throws Exception {
		 	Stage primaryStage2 = new Stage();
			Parent root2 = FXMLLoader.load(getClass().getResource("\\Edit.fxml"));
			Scene scene2 = new Scene(root2);
			scene2.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
			primaryStage2.setScene(scene2);
			primaryStage2.show();
	 }

	 @FXML
	 public void removeA(ActionEvent event) throws Exception {
		 Person selected = person.getSelectionModel().getSelectedItem();
		 data.remove(selected);
	 }

	 @FXML
	 public void saveListA(ActionEvent event) throws IOException {

	            // write object to fill
//	    	    FileOutputStream fos = new FileOutputStream("listOfPeople.json");
//	            ObjectOutputStream oos = new ObjectOutputStream(fos);
//		        oos.writeObject(jsonObject);
//
//	            fos.flush();
//	            fos.close();
		  try {


			   //write converted json data to a file named "CountryGSON.json"
			   FileWriter writer = new FileWriter("listOfPeople.json");
			   String s = getJsonObject();
			   writer.write(s);
			   writer.close();

			  } catch (IOException e) {
			   e.printStackTrace();
			  }

			  System.out.println(jsonObject);

		    System.out.println("działa");

            Stage primaryStage3 = new Stage();
			Parent root3 = FXMLLoader.load(getClass().getResource("\\Save.fxml"));
			Scene scene3 = new Scene(root3);
			scene3.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
			primaryStage3.setScene(scene3);
			primaryStage3.show();
	 }


	 private void readList(ArrayList<Person> list) throws IOException, ClassNotFoundException {
//	        try {
//	        	FileInputStream in = new FileInputStream("listOfPeople.txt");
//	            ObjectInputStream ois = new ObjectInputStream(in);
//	            List<Person> data = (List<Person>) ois.readObject() ;
//
//	            return FXCollections.observableList(data);
//	        } catch (ClassNotFoundException e) {
//	            e.printStackTrace();
//	        } catch (IOException e) {
//	            e.printStackTrace();
//	        }
//	        return FXCollections.emptyObservableList();

		 try {
			 Gson gson = new Gson();
			 BufferedReader br = new BufferedReader(
	                    new FileReader("listOfPeople.json"));
			Person read = gson.fromJson(br, Person.class);
			System.out.println(read);

			list.add(read);
//			list = (ArrayList<Person>) oos.readObject();
			System.out.println(list.size());
//			fout.close();
//		} catch (ClassNotFoundException e) {
//            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

	    }

	public static ObservableList<Person> getData() {
		return data;
	}

	public static void setData(ObservableList<Person> data) {
		MainController.data = data;
	}

	public static ArrayList<Person> getList() {
		return list;
	}

	public static void setList(ArrayList<Person> list) {
		MainController.list = list;
	}

	public String getJsonObject() {
		return jsonObject;
	}

	public void setJsonObject(String jsonObject) {
		this.jsonObject = jsonObject;
	}

}

public class AddController extends MainController implements Initializable {

	@FXML private TextField nameT;
	@FXML private TextField surnameT;
	@FXML private TextField locT;
	@FXML private DatePicker dateOfBirth;
	@FXML private RadioButton sexM;
	@FXML private RadioButton sexF;
	@FXML private RadioButton sexG;
	@FXML private Button finish;
	@FXML private Label lblN;
	@FXML private Label lblS;
	@FXML private Label lblL;



    @FXML private ToggleGroup sexToggleGroup = new ToggleGroup();

    private boolean num;
    private boolean num2;
    private boolean num3;
    private boolean num4;


    @Override
    public void initialize(URL location, ResourceBundle resources){

        sexM.setToggleGroup(sexToggleGroup);
        sexF.setToggleGroup(sexToggleGroup);
        sexG.setToggleGroup(sexToggleGroup);
    	sexM.setUserData("Male");
    	sexF.setUserData("Female");
    	sexG.setUserData("Gender Asshole");

		nameT.textProperty().addListener((observable, oldValue, newValue) -> {
            String newWordN = StringUtils.capitalize(newValue);
            nameT.setText(newWordN);

            if(num == StringUtils.isAlpha(newValue)){
                lblN.setText("Only letters");
                num = true;
            } else {
                num = false;
            }
		});

		surnameT.textProperty().addListener((observable, oldValue, newValue) -> {
            String newWordS = StringUtils.capitalize(newValue);
            surnameT.setText(newWordS);

            if(num2 == StringUtils.isAlpha(newValue)){
                lblS.setText("Only letters");
                num2 = true;
            } else {
                num2 = false;
            }
		});

		locT.textProperty().addListener((observable, oldValue, newValue) -> {
            String newWordS = StringUtils.capitalize(newValue);
            locT.setText(newWordS);

            if(num3 == StringUtils.isAlpha(newValue)){
                lblL.setText("Only letters");
                num3 = true;
            } else {
                num3 = false;
            }
		});


//		Gson(list, getJsonObject());
    }


    public ArrayList<Person> textAd(){
		 Person one = new Person(
					nameT.getText(),
					surnameT.getText(),
					dateOfBirth.getEditor().getText(),
					sexToggleGroup.getSelectedToggle().getUserData().toString(),
					locT.getText()
					);
		 list.add(one);
		 setList(list);
		 gsonConvert(list, getJsonObject());
		 System.out.println(list.get(list.size() - 1).getSurname());
		 System.out.println(list.size());

		return list;
    }

    public ObservableList<Person> listAd(){

    	textAd();

    	Person one = list.get(list.size() - 1);
    	changeDate(one);

    	Person two = new Person(
    			one.getName(),
    			one.getSurname(),
    			one.getAge(),
    			one.getSex(),
    			one.getLocation()
    			);

		 data.addAll(two);
		 setData(data);
		 System.out.println(data.get(data.size() - 1).getName());
		 System.out.println(data.size());
		return data;
    }


    public void changeDate(Person one){
    	LocalDate newDate = LocalDate.now();
    	int year = newDate.getYear();
    	int date = dateOfBirth.getValue().getYear();

    	System.out.println(year - date);
    	one.setAge(String.valueOf(year - date));
    }

    public void gsonConvert(ArrayList<Person> list, String jsonObject){
    	Person one = list.get(list.size() - 1);
    	Gson gson = new Gson();
    	jsonObject = gson.toJson(one);
    	System.out.println(jsonObject);
    }

	 @FXML
	 public void btn1(ActionEvent event) throws Exception {

	 listAd();
	 person.setItems(data);
	 person.refresh();


    Stage stage = (Stage) finish.getScene().getWindow();
     stage.close();
	 }



	public TextField getNameT() {
		return nameT;
	}

	public void setNameT(TextField nameT) {
		this.nameT = nameT;
	}

	public TextField getSurnameT() {
		return surnameT;
	}

	public void setSurnameT(TextField surnameT) {
		this.surnameT = surnameT;
	}

	public TextField getLocT() {
		return locT;
	}

	public void setLocT(TextField locT) {
		this.locT = locT;
	}

	public DatePicker getDateOfBirth() {
		return dateOfBirth;
	}

	public void setDateOfBirth(DatePicker dateOfBirth) {
		this.dateOfBirth = dateOfBirth;
	}

	public RadioButton getSexM() {
		return sexM;
	}

	public void setSexM(RadioButton sexM) {
		this.sexM = sexM;
	}

	public RadioButton getSexF() {
		return sexF;
	}

	public void setSexF(RadioButton sexF) {
		this.sexF = sexF;
	}

	public RadioButton getSexG() {
		return sexG;
	}

	public void setSexG(RadioButton sexG) {
		this.sexG = sexG;
	}

	public ToggleGroup getSexToggleGroup() {
		return sexToggleGroup;
	}

	public void setSexToggleGroup(ToggleGroup sexToggleGroup) {
		this.sexToggleGroup = sexToggleGroup;
	}
}

Viewing all articles
Browse latest Browse all 21942