如何在fxml文件中获取imageView

时间:2014-04-30 22:04:37

标签: java javafx fxml scenebuilder

我有这个fxml文件

<?xml version="1.0" encoding="UTF-8"?>

<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.effect.*?>
<?import javafx.scene.image.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.text.*?>

<StackPane opacity="1.0" prefHeight="700.0" prefWidth="1024.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2" fx:controller="engine.scene.ctrler">
  <children>
    <ImageView fitHeight="701.7022094726562" fitWidth="1235.874704009025" pickOnBounds="true" preserveRatio="true" visible="true" StackPane.alignment="CENTER">
      <effect>
        <Glow level="0.9371069182389937" />
      </effect>
      <image>
        <Image url="@../../../resources/img/bg.jpg" />
      </image></ImageView></children></stackpane>

我希望在我的场景大小改变时改变我的imageView的宽度和高度。我知道我应该使用这个

  stage.widthProperty().addListener(new ChangeListener() { 
        @Override
        public void changed(ObservableValue ov, Object t, Object t1) {              
           myImageView.setFitWidth(stage.getWidth());
        }
    });

但我不知道如何从fxml文件中获取ImageView

1 个答案:

答案 0 :(得分:3)

我想你需要它是一个控制器。

首先,您必须在FXML的StackPane行上添加以下属性

FX:控制器=&#34; the.package.ControllerName&#34;

带有Id的ImageView上的属性:

FX:ID =&#34;图像标识&#34;

当然,.package是您要使用的Controller的包。

要实现控制器,请创建一个具有所需名称的新类,并扩展StackPane并覆盖initialize方法:

package the.package;  

public class ControllerName extends StackPane{

  @FXML
  ImageView imageId;

  @Override
  public void initialize(URL url, ResourceBundle resourceBundle) {
    //You can add code here. 

    //With JavaFX2
    widthProperty().addListener(new ChangeListener() { 
      @Override
      public void changed(ObservableValue ov, Object t, Object t1) {              
        myImageView.setFitWidth(stage.getWidth());
      }
    });

     //With JavaFX8 Using Lambdas
     widthProperty().addListener((ov, t, t1) ->
       myImageView.setFitWidth(getWidth()));         

  }
}

如果这不起作用,则需要在控制器中创建一个调整ImageView大小的新公共方法。您可以从已实现的阶段侦听器中调用此方法。

告诉我这不是你想要的地方。

P.S - 我有一个使用这个概念的小项目here