javafx, заменить изображение в представлении изображения новым изображением из средства выбора файлов? - PullRequest
0 голосов
/ 03 февраля 2020

В настоящее время я работаю с 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) {

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...