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

图像URL的FXML变量标记

白志勇
2023-03-14

我正在做一个项目,我需要在特定目录中的多个图像之间切换,以用作我程序的背景。不幸的是,我不能将所有图像路径硬编码为fxml的url,并使用fxids在每个路径之间切换,因为我有太多的图像,并且一周内都会添加新图像。我创建了一个fxid,它链接到一个特定的变量,该变量保存图像的路径。这个变量是一个路径为“@.../image/Planets/image1.png”的url。fxml正确加载按钮元素,但无法加载与给定变量关联的链接url。我获取了确切的url并将其直接放入fxml中,从而正确显示了一张图像。我需要帮助才能在fxml中正确识别url变量。下面是我的fxml代码。

<AnchorPane fx:id="AP" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="main.java.controllers.PlanetController">
   <children>
      <fx:define>
      <URL fx:id="image"/>
      </fx:define>
      <ImageView fitHeight="721.0" fitWidth="1289.0">
         <image>
            <Image url="$image"/>
         </image>
      </ImageView>
      <Button fx:id="map" layoutX="709.0" layoutY="685.0" mnemonicParsing="false" onAction="#handleNext" text="Map" />
      <Button layoutX="428.0" layoutY="690.0" mnemonicParsing="false" text="Market" />
   </children>
</AnchorPane>

下面是加载fxml文档的javafx代码。忽略rootController。它将场景设置为vBox。

@FXML
private URL image;

@FXML
public void handleTravelToRegion() {
image = new URL("@../images/Planets/image4.jpg");
try {
            URL url = this.getClass().getResource(getScene("destinationPlanet"));
            FXMLLoader loader = new FXMLLoader(url);
            Node scene = loader.load();
            rootController.setScene(scene);
        } catch (IOException e) {
            e.printStackTrace();
        }
}

请帮我获取<代码>

共有1个答案

钮高朗
2023-03-14

如果其他人在将节点设置为fxml文档中的变量时遇到困难,请转到控制器类中的initialize方法,并将所需节点添加到fxml文档中链接的窗格中。在我的例子中,我在fxml文档中使用了anchorPane,我使用@fxml标记将其链接到我的控制器类。我需要将包含随机图像文件的ImageView节点添加到锚定窗格中。我所需要做的就是在FXML初始化方法中添加节点,否则,不会显示对场景的任何更改。下面是我的fxml文档和控制器类的最终结果:

<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.layout.AnchorPane?>

<AnchorPane fx:id="ap" maxHeight="-Infinity" maxWidth="-Infinity"
        minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="main.java.controllers.PlanetController">

在我的控制器类中,我需要执行以下操作:

public class PlanetController implements Initializable {
private ImageView background = new ImageView();

@FXML
private AnchorPane ap = new AnchorPane();

public void initialize(URL url, ResourceBundle resourceBundle) {
    Random rand = new Random();
    File[] imageArray = new File("@../images/Planets/").listFiles();
    Image image = new Image(imageArray[rand.nextInt(imageArray.length)]
        .toURI().toString());
    background = new ImageView(image);
    ap.getChildren().add(background);
}

这就是我所要做的让背景发挥作用。

 类似资料:
  • 我试图在谷歌上找到我的答案,但现在没有结果。 所以我很抱歉,如果这是一个已经解决的帖子。 我想做的:当我的FXML文件加载时,我希望这个文件中的图像视图从一个包含在一个字符串表中的URL加载一个图像,该字符串表中包含不同的URL,这样我就可以根据我的变量。我尝试过绝对路径和相对路径。 我的fxml文件控制器: 和我的Fxml文件: 所以有了这个,我可以改变来改变加载的图像。当我用经典的方式加载时,

  • 我正在从我的数据库中调用一个产品图像url,在前端页面中,我有一些css对页面上的图像进行样式化。但是,我需要将产品图像的url传递到css,它指定了图像的url... 我的CSS: 显示背景图像的产品页面 如果将product-image放在div中,它将呈现产品图像。如何将此url传递到CSS中?所以没有-> -> 我将有 这可能吗?

  • 问题内容: 我的FXML注入有问题。据我所知,我已经设置了程序,但似乎缺少了一些东西。我的代码如下: 主要: 控制器: FXML文件: 识别我正在注入 noteTree,sp和newNoteButton的字段 。但是,当我尝试将项目加载到树形视图时,我得到了NPE。我确认使用if语句表明我的3个字段是。堆栈跟踪如下: 事实证明我和我的功能都可以通过。 谁能指出我缺少/做错了什么? 问题答案: 您试

  • 我目前正在为我的学习做一个Java(+使用MySQL)应用程序:一个Hopital的数据库 我使用JavaFX编写接口代码。我有一个主FXML(用于一般视图),其中有选项卡,在每个选项卡中,我使用(fx:include)导入另一个FXML。以便我的应用程序的每个模块都有自己的控制器和自己设计的视图。 如何将变量从主控制器传递给其他控制器? 谢谢!编辑:让我给你看我的代码 首先,这是我加载我的fxm

  • 因此,我在Django中有我的views.py,它将对象列表呈现给我的html模板。一切正常。现在,这些对象有一些与之关联的对象ID。我将“static/images/”目录中的图像命名为与对象ID相同的名称。 因此,图像1.jpg将对应于对象id=1的对象,2.jpg对象id=2,依此类推。 现在我想在html中加载img标记中的图像,但是img标记的src URL将取决于对象id。 以下是我的

  • 我一直在寻找在中包含FXML和图像的适当方法,以便将它们构建到JAR中。我看过这里,试过它,但它仍然不起作用。 抛出此错误: 以下是(Github): 下面是gui.java(Github): stacktrace表示导致了错误 在外面的树,他们都不在,我已经摆弄了几个小时,试图解决这个问题。如有任何帮助,将不胜感激。 如果需要更多信息,这里还有Github存储库