Отображение изображения с помощью SceneBuilder

Я создал небольшой файл FXML с помощью SceneBuilder, 3 кнопок и 2 ImageView.

Что я хочу сделать, так это:

  1. Запустите приложение и отобразите 2 изображения при запуске
  2. При нажатии кнопки NEXT отобразите 2 других изображения.

Моя проблема заключается не в переключении изображений, а в отображении их в виде ImageView, созданного построителем сцен.

Вот мой класс контроллера:

public class Controller {
    private Button Next; //1st button
    private Button J2inc; //2nd button
    private Button J1inc; /3rd button
    private ImageView Img1;
    private ImageView Img2;

    void Inc2(ActionEvent event) {
        //nothing for the moment
    }
    void Inc1(ActionEvent event) {
        //nothing for the moment
    }
    void Nextimg(ActionEvent event) {
        //nothing for the moment
    }
}

И мой метод start:

public void start(Stage primaryStage) throws Exception {
    Parent root =  FXMLLoader.load(getClass().getResource("Css.fxml"));
    Scene scene = new Scene(root);
    primaryStage.setScene(scene);
    primaryStage.setTitle("P ");
    primaryStage.show();
}

Я не знаю, как инициализировать ImageView img1, чтобы он что-то загружал.

Не удалось добавить сюда FXML, поэтому я добавлю только строку ImageView:

  <ImageView fx:id="Img1" fitHeight="750.0" fitWidth="450.0" layoutY="22.0" pickOnBounds="true" preserveRatio="true" AnchorPane.bottomAnchor="50.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="450.0" AnchorPane.topAnchor="25.0" />

person Community    schedule 02.03.2017    source источник
comment
Что означает «Не удалось добавить FXML»? Если вам нужно знать, как форматировать код, прочтите это. . Также обратите внимание, что это поможет людям прочитать ваш код Java (и он будет правильно выделен), если вы используете правильные соглашения об именах.   -  person James_D    schedule 02.03.2017
comment
Да, это то, что я имел в виду, я прочитаю это снова.   -  person    schedule 02.03.2017


Ответы (1)


Чтобы инициализировать его в контроллере, сделайте переменную доступной, аннотировав ее @FXML, и инициализируйте ее в методе initialize() контроллера:

public class Controller {
    private Button Next; //1st button
    private Button J2inc; //2nd button
    private Button J1inc; /3rd button

    @FXML
    private ImageView Img1;

    private ImageView Img2;

    public void initialize() {
        Img1.setImage(new Image(...));
    }

    void Inc2(ActionEvent event) {
        //nothing for the moment
    }

    void Inc1(ActionEvent event) {
        //nothing for the moment
    }

    void Nextimg(ActionEvent event) {
        //nothing for the moment
    }
}

Если вы предпочитаете инициализировать его непосредственно в FXML, укажите значение для атрибута image. В конструкторе сцен вы можете выбрать ImageView и ввести URL-адрес изображения в поле «Изображение» в правом верхнем углу (в разделе «Свойства»). Обязательно прочтите Image документацию для того, как интерпретируется строковое представление URL.

person James_D    schedule 02.03.2017
comment
@Bouji Вы должны проверить ответ как правильный, если это решение вашей проблемы. - person Sedrick; 02.03.2017