• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zapisywanie formatu Json z listy do pliku JavaFX

VPS Starter Arubacloud
0 głosów
259 wizyt
pytanie zadane 29 czerwca 2017 w Java przez XtrEmE Nowicjusz (200 p.)
edycja 29 czerwca 2017 przez XtrEmE

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;
	}
}

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
0 odpowiedzi 234 wizyt
pytanie zadane 6 sierpnia 2017 w Java przez Rubeus024 Obywatel (1,680 p.)
+1 głos
1 odpowiedź 330 wizyt
pytanie zadane 28 sierpnia 2021 w Java przez Lulex Użytkownik (820 p.)
0 głosów
0 odpowiedzi 1,619 wizyt
pytanie zadane 13 stycznia 2018 w Java przez Kasia Nowicjusz (230 p.)

92,455 zapytań

141,263 odpowiedzi

319,100 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...