Открыть изображение из FileChooser в JavaFX

Моя программа должна загружать изображение из файла, а затем отображать это изображение в качестве фона. Моя проблема в том, что когда я создаю объект Image в его параметрах, он запрашивает файл, который вы пытаетесь поместить. Я попытался поместить свой объект File в его параметры, и он не работает. Помогите мне, пожалуйста. Я застрял.

public class FileOpener extends Application{

    public void start(final Stage stage) {
        stage.setTitle("File Chooser Sample");

        final FileChooser fileChooser = new FileChooser();

        final Button openButton = new Button("Choose Background Image");
        openButton.setOnAction((final ActionEvent e) -> {
            File file = fileChooser.showOpenDialog(stage);
            if (file != null) {
               // openFile(file);

               // where my problem is 
                Image image1 = new Image("file");
                // what I tried to do
                    // Image image1 = new Image(file);
                ImageView ip = new ImageView(image1);
                BackgroundSize backgroundSize = new BackgroundSize(100, 100, true, true, true, false);
                BackgroundImage backgroundImage = new BackgroundImage(image1, BackgroundRepeat.REPEAT, BackgroundRepeat.NO_REPEAT, BackgroundPosition.CENTER, backgroundSize);
            }
        }); 
        final StackPane stac = new StackPane();       
        stac.getChildren().add(openButton);
        stage.setScene(new Scene(stac, 500, 500));
        stage.show();
    }  

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

person IbrahimLikeJava    schedule 30.01.2017    source источник


Ответы (1)


Проблема в том, что конструктор Image ожидает String url, а вы передаете ему File. Любая хорошая IDE скажет вам, что данный метод ожидает в качестве своих параметров; найдите это сочетание клавиш и используйте его (Ctrl + P в IntelliJ). Оттуда все, что вам нужно сделать, это найти способ преобразовать File в String, представляющий его URL. В таком случае:

Image image1 = new Image(file.toURI().toString());

Обратите внимание, что на самом деле вы никогда не устанавливаете фоновое изображение, вам нужно добавить следующую строку в свою лямбду:

stac.setBackground(new Background(backgroundImage));

Однако для этого вам придется переместить объявление stac над вашим прослушивателем действий.

person MikaelF    schedule 30.01.2017