当前位置: 首页 > 知识库问答 >
问题:

为什么ImageView没有通过JavaFX FXML注入?

郎玮
2023-03-14
package me.mycontroller
import javafx.fxml.FXML
import java.util.ResourceBundle
import java.net.URL
import javafx.scene.image.ImageView

/** 
 * @author me
 */
 class InvoiceController {

    @FXML
    private var resources: ResourceBundle = null

    @FXML
    private var location: URL = null


    @FXML
    private var imageBox2: ImageView = null


    @FXML
    def initialize() {
        if(imageBox2==null) { throw new IllegalArgumentException("imageBox was null")}



    }


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

<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.collections.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.image.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.paint.*?>

<AnchorPane id="AnchorPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity"     minWidth="-Infinity" prefHeight="286.0" prefWidth="512.0" xmlns:fx="http://javafx.com/fxml" fx:controller="me.mycontroller.InvoiceController">
    <children>
        <HBox alignment="CENTER" prefHeight="100.0" prefWidth="435.0" spacing="10.0" AnchorPane.bottomAnchor="58.0" AnchorPane.leftAnchor="38.5" AnchorPane.rightAnchor="38.5" AnchorPane.topAnchor="128.0">
          <children>
            <Label text="Invoice File" />
            <TextField fx:id="fileField" prefWidth="200.0" />
          </children>
        </HBox>
        <HBox alignment="CENTER" prefHeight="100.0" prefWidth="400.5" spacing="10.0" AnchorPane.bottomAnchor="-7.0" AnchorPane.leftAnchor="52.5" AnchorPane.rightAnchor="59.0" AnchorPane.topAnchor="193.0">
          <children>
            <AnchorPane prefHeight="100.0" prefWidth="376.0">
              <children>
            <AnchorPane layoutX="16.0" layoutY="0.0" prefHeight="100.0" prefWidth="294.0">
              <children>
                <Label layoutY="42.0" prefWidth="65.0" text="Supplier" AnchorPane.leftAnchor="25.0" />
                <ChoiceBox fx:id="supplierDropDown" layoutY="40.0" prefWidth="200.0" AnchorPane.rightAnchor="5.0">
                  <items>
                    <FXCollections fx:factory="observableArrayList">
                      <String fx:value="Item 1" />
                      <String fx:value="Item 2" />
                      <String fx:value="Item 3" />
                    </FXCollections>
                  </items>
                </ChoiceBox>
              </children>
            </AnchorPane>
          </children>
        </AnchorPane>
      </children>
    </HBox>
    <ImageView fx:id="imageBox2" fitHeight="105.99999961206467" fitWidth="141.3333282470703" layoutX="53.0" layoutY="22.0" pickOnBounds="true" preserveRatio="true">
      <image>
        <Image url="@../images/Regional.jpeg" />
      </image>
    </ImageView>
  </children>
</AnchorPane>

父根=fxmlloader.load(getClass().getResource(“/fxml/invoice.fxml”));

我得到一个异常,因为imagebox2为null。知道为什么没有注射吗?

共有1个答案

漆雕洋
2023-03-14
src/
    main/
       Main.java
       MainLayoutController.java
       main_layout.fxml
    ...

MainLayoutController.java:

public class MainLayoutController {

@FXML
private ImageView previewImage;

void setImage(Image img) {
    previewImage.setImage(img);
}

}

main_layout.fxml:

<VBox ... fx:controller="main.MainLayoutController">
    <children>
       ...
       <ImageView fx:id="previewImage" ... />
    </children>
</VBox>
public class Main extends Application {

    private MainLayoutController mainLayoutController;

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

    @Override
    public void start(Stage primaryStage) throws Exception {
        FXMLLoader fxmlLoader = new FXMLLoader();
        Parent root = fxmlLoader.load(
            getClass().getResource("main_layout.fxml").openStream());

        primaryStage.setScene(new Scene(root));
        primaryStage.show();

        mainLayoutController = fxmlLoader.getController();
        mainLayoutController.setImage(...);
    }
    ...
}
 类似资料:
  • 问题内容: 我发现不方便之处在于番石榴中的前提条件没有标注注释。考虑以下示例: 因此IDE找不到总是错误的。是否有任何特殊原因为什么不标记此前提条件(即使其参数是使用定义的)。 问题答案: 很抱歉,我们没有在任何地方使用过。为什么?我们尝试添加更多的空检查注释,发现: 添加所有其他注释非常冗长。 这就是我们所需要的。诚然,对于Guava开发人员而言,这比Guava用户更为重要。 似乎遇到了大多数问

  • 问题内容: 我发现注释在重写派生类中的某些超类方法时非常有帮助。基本上,编译器会尽早发现程序中的缺陷,这总是一件好事。但是,为什么Java中没有@Implements批注? 问题答案: 因为您也使用接口定义的方法。 (是的,您是“实现”而不是“覆盖” …但同时用于两者)

  • 问题内容: 好的,我知道三引号字符串可以用作多行注释。例如, 和 但是从技术上讲,这些是字符串,对吗? 我已经在Google上搜索并阅读了Python样式指南,但无法找到关于为什么没有正式实现多行,/ * * /注释类型的技术答案。我使用三重引号没有问题,但是对于导致这个设计决定的原因我有点好奇。 问题答案: 我怀疑您会得到比“ Guido不需要多行注释”更好的答案。 Guido在推特上发布了以下

  • 我有一个灰色的抽屉。无论何时用户喜欢一张图片,这可绘制的,但应在颜色黑色(阿尔法的可绘制需要停留)。 我正在这样做:

  • 代码段 我使用redis-cli工具检查了密钥的可用性 钥匙* 而且 ttl密钥名 redis.conf具有默认值。 有什么建议吗? 编辑1: 完整代码: 功能在一个方面 当这些线路运行时 RedisAtomicInteger计数器=计数器=新RedisAtomicInteger(“MyKey”);Counter.Expire(1,TimeUnit.Minutes); 我能看见 在Redis日志中

  • 问题内容: 我正在尝试做这样的事情: 不幸的是,即使在Java 9中也不存在。 为什么它被遗漏了? 建议的解决方法是什么? 问题答案: 为什么它被遗漏了? 该API提供了可重用的构建块。这里的相关积木是,,。通过这些,您可以实现所需的功能:将流内映射到对象,然后获得平面图。提供构建基块的排列是不切实际的,并且很难扩展。 建议的解决方法是什么? 如前所述,使用可用的构建基块(+ ):