Java 当文本字段中键入的文本与图像名称匹配时,如何在ImageView中显示图像?

Java 当文本字段中键入的文本与图像名称匹配时,如何在ImageView中显示图像?,java,javafx,javafx-8,fxml,Java,Javafx,Javafx 8,Fxml,我在项目文件夹中保存了一些图像。每个图像都有一个名称。例如:a、aa、aba等。当相关图像与文本字段中键入的图像名称匹配时,我希望将其显示在ImageView中 例如,如果我在文本字段中键入“a”,它将打开名为“a”的图像。如果我键入“ab”,它将不会打开任何图像,因为名为“ab”的图像文件夹中没有图像。只有当图像的名称与文本字段中键入的文本匹配时,才会显示图像 我已经编写了如下代码- Application\u Controler.java public class Application_C

我在项目文件夹中保存了一些图像。每个图像都有一个名称。例如:a、aa、aba等。当相关图像与文本字段中键入的图像名称匹配时,我希望将其显示在ImageView中

例如,如果我在文本字段中键入“a”,它将打开名为“a”的图像。如果我键入“ab”,它将不会打开任何图像,因为名为“ab”的图像文件夹中没有图像。只有当图像的名称与文本字段中键入的文本匹配时,才会显示图像

我已经编写了如下代码-

Application\u Controler.java

public class Application_Controler implements Initializable{

    @FXML
    private TextField txt;

    @FXML
    private ImageView img;

    @Override
    public void initialize(URL url, ResourceBundle rb) {
        String text=txt.getText();              
        File file = new File("src/images/"+text);
        Image image = new Image(file.toURI().toString());
        img.setImage(image);
    }
}
以下是.fxml文件:

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

<?import javafx.scene.image.*?>
<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.AnchorPane?>

<AnchorPane xmlns="http://javafx.com/javafx/8.0.40" xmlns:fx="http://javafx.com/fxml/1" fx:controller="imran.jfx.application.Application_Controler">
   <children>
      <AnchorPane layoutX="-17.0" layoutY="-14.0" prefHeight="461.0" prefWidth="454.0">
         <children>
            <TextField fx:id="txt" layoutX="122.0" layoutY="87.0" prefHeight="55.0" prefWidth="229.0" />
            <ImageView fx:id="img" fitHeight="281.0" fitWidth="426.0" layoutX="24.0" layoutY="175.0" pickOnBounds="true" preserveRatio="true" />
         </children>
      </AnchorPane>
   </children>
</AnchorPane>

值得一提的是,在写入文本字段后,无需按任何额外的“回车”键即可显示图像。

您可以使用绑定:

@Override
public void initialize(URL url, ResourceBundle rb) {
    img.imageProperty().bind(Bindings.createObjectBinding(() -> {
        File file = new File("src/images/"+txt.getText());
        if (file.exists()) {
            return new Image(file.toURI().toString());
        } else {
            return null ;
        }
    }, txt.textProperty());
}

这假设您的路径是正确的(我觉得很奇怪),并且用户在文本字段中键入了整个文件名(如果需要,包括文件扩展名)。显然,您可以根据需要修改
文件
构造函数的参数。

您需要找到类路径中可用的所有资源。请看一看,然后尝试重新实现您在这里尝试执行的操作。@James\u是一个很好的解决方案。我想替换的唯一步骤是使用
classloader
加载图像,而不是使用
io.File
,因为图像已经放在src目录中。是的,我也会,但OP似乎认为这是他需要的。。。这个问题并不完全清楚这些图像是与应用捆绑在一起的,还是实际存在于用户的文件系统中。我可能会在早上更新它。。。