В настоящее время я работаю с javafx и слежу за этим видео сериалом, чтобы помочь с учебой, и я столкнулся с небольшой проблемой, так как сериал обрезается немного меньше.
Таким образом, изображение изменяется, когда я использую кнопку, чтобы изменить его, но если я затем go вернусь в другую сцену и вернусь, это изображение будет исходным изображением, которое было раньше. Мне удалось получить изображение для сохранения, как я могу сохранить это изменение изображения?
public class PersonViewController implements Initializable{
private Person selectedPerson;
@FXML private Label firstNameLabel;
@FXML private Label lastNameLabel;
@FXML private Label birthdayLabel;
@FXML private Label ageLabel;
@FXML private ImageView photo;
private FileChooser fileChooser;
private File filepath;
//this method will allow the user to change the image on the screen
public void chooseImageButtonPushed(ActionEvent event){
Stage stage = (Stage)((Node)event.getSource()).getScene().getWindow();
fileChooser = new FileChooser();
fileChooser.setTitle("OpenImage");
//set to user's directory or go to the default C drive if cannot access
String userDirectoryString = System.getProperty("user.home") + "\\Pictures";
File userDirectory = new File(userDirectoryString);
File outputFile = new File("C:\\Users\\Komodo\\IdeaProjects\\learning c482\\src\\profile.png");
if (!userDirectory.canRead())
userDirectory = new File("c:/");
fileChooser.setInitialDirectory(userDirectory);
this.filepath = fileChooser.showOpenDialog(stage);
//try to update the image by loading the new image
try{
BufferedImage bufferedImage = ImageIO.read(filepath);
Image image = SwingFXUtils.toFXImage(bufferedImage, null);
selectedPerson.setImage(image);
photo.setImage(selectedPerson.getImage());
ImageIO.write(bufferedImage, "png", outputFile);
}catch (IOException e) {
System.err.println(e.getMessage());
}
}
//this method accepts a person to initialize the view
public void initData(Person person){
selectedPerson = person;
firstNameLabel.setText(selectedPerson.getFirstName());
lastNameLabel.setText(selectedPerson.getLastName());
birthdayLabel.setText(selectedPerson.getBirthday().toString());
ageLabel.setText(Integer.toString(selectedPerson.getAge()));
photo.setImage(selectedPerson.getImage());
}
//when this method is called it will change the scene to detailed person view example
public void changeScreenButtonPushed(ActionEvent event) throws IOException {
Parent tableViewParent = FXMLLoader.load(getClass().getResource("ExampleOfTableView.fxml"));
Scene tableViewScene = new Scene(tableViewParent);
//this line gets the stage information
Stage window = (Stage) ((Node)event.getSource()).getScene().getWindow();
window.setScene(tableViewScene);
window.show();
}
@Override
public void initialize(URL location, ResourceBundle resources) {
}
}