JAVAFX FXML:动态创建的选项卡中的动态 ImageView 不显示

秋日

我正在制作一个将显示滑雪胜地天气数据的 Java 应用程序。用户登录后,它会创建一个场景,其中包含一个带有动态创建的选项卡的选项卡窗格,每个用户最喜欢的度假村都有一个选项卡。所有数据都存储在 mysql 数据库中。

我能够为每个用户成功创建所有选项卡,现在我尝试使用 ImageView 对象将与每个度假村关联的图像加载到正在加载的每个选项卡中。我不知道为什么,但我无法在任何选项卡中显示任何图像。理想情况下,我想获取存储在数据库中的图像文件的名称,创建文件路径字符串并加载图像。我也试过硬编码文件路径,并在场景构建器中设置图像,但都不起作用。

我的收藏夹控制器具有 tabPane 并动态创建选项卡

@FXML
private TabPane tabPane;
private Tab myTab;

/**
 * Initializes the controller class.
 * @param url
 * @param rb
 */
@Override
public void initialize(URL url, ResourceBundle rb) {
    try {
        DBConnect dbConnection = new DBConnect();
        // GET USER ID, THEN ARRAY OF THE ID'S FAVORITE RESORTS
        int id = LoggedInUser.id;
        //string array of the names of the users favorited resorts
        String[] resorts = dbConnection.getFavorites(id);

        // DYNAMICALLY CREATE TABS BASED ON THE NUMBER OF FAVORITES FOR THE ACTIVE USER.
        for(int i = 0; i < resorts.length; i++) {
            FXMLLoader loader = new FXMLLoader();
            ResortTab newTabController = new ResortTab(resorts[i]);
            loader.setLocation(getClass().getResource("ResortTab.fxml"));
            loader.setController(newTabController);

            Parent parent = loader.load();
            myTab = new Tab(resorts[i]);
            myTab.setContent(parent); 
            tabPane.getTabs().add(myTab);
        }

    } catch (SQLException | ClassNotFoundException | IOException ex) {
        Logger.getLogger(FavoritesController.class.getName()).log(Level.SEVERE, null, ex);
    }

}    

ResortTab,动态创建选项卡的控制器

public class ResortTab implements Initializable{
String name;
DBConnect dbConnection;
private Image image;
private String resort;


@FXML
private Label label;
@FXML
private ImageView logo;

// CONSTRUCTOR
public ResortTab(String name) throws SQLException, ClassNotFoundException {
    resort = name;
    this.name = name;
    // GET LOGO FILE PATH FROM DATABASE AND LOAD IT TO THE SCENE
    dbConnection = new DBConnect();
    //returns file path thats stored in the database example: images/Logos/resortname.jpg
    String path = dbConnection.getLogoPath(name); 

    System.out.println("'src/jesnwdskiweather/" + path + "'");
    System.out.println("Working Directory = " + System.getProperty("user.dir"));

    // Create full path 
    String full_path = "file:'/src/jesnwdskiweather/" + path + "'";

    // String used to test by hardcoding
    String testPath = "file:'src/jesnwdskiweather/images/Logos/RevelstokeMountain.png'";

    System.out.println(full_path); //prints correct file path
    image = new Image(full_path);
    if(image == null){
        System.out.println("Image is null"); //does not print
    }

}

@Override
public void initialize(URL location, ResourceBundle resources) {
    logo.setImage(image);
    logo.setCache(true);
    label.setText(name);
}

ResortTab.fxml

<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.image.*?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>

<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0"     xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">
  <children>
     <Label fx:id="label" layoutX="342.0" layoutY="112.0" text="Label" />
     <ImageView fx:id="logo" fitHeight="150.0" fitWidth="200.0" pickOnBounds="true" preserveRatio="true" />
  </children>
</AnchorPane>
Menai Ala Eddine - 阿拉丁

我试图复制您的代码并进行一些更改以找到错误,我发现您的错误在这里String full_path = "file:'/src/jesnwdskiweather/" + path + "'";并且您不需要添加/src/到您的路径中,请参阅说明

错误路径:

这里

真实路径: 在此处输入图片说明

尝试将完整路径更改为 String full_path = "jesnwdskiweather/" + path";

有一些变化的源代码:

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package stackoverflow;

import java.net.URL;
import java.sql.SQLException;
import java.util.ResourceBundle;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Label;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;

/**
 * FXML Controller class
 *
 * @author Electron
 */
public class ResortTab implements Initializable {

    String name;
    private Image image;
    private String resort;
    @FXML
    private Label label;
    @FXML
    private ImageView logo;

// CONSTRUCTOR
    public ResortTab(String name) throws SQLException, ClassNotFoundException {
        resort = name;
        this.name = name;
        // GET LOGO FILE PATH FROM DATABASE AND LOAD IT TO THE SCENE
      //  dbConnection = new DBConnect();
        //returns file path thats stored in the database example: images/Logos/resortname.jpg
        String path = "1487868084_39_Email_Marketing.png";

        System.out.println("'src/jesnwdskiweather/" + path + "'");
        System.out.println("Working Directory = " + System.getProperty("user.dir"));

        // Create full path 
        String full_path = "jesnwdskiweather/" + path +"";

        // String used to test by hardcoding
        String testPath = "file:'src/jesnwdskiweather/images/Logos/RevelstokeMountain.png'";

        System.out.println(full_path); //prints correct file path
        image = new Image(full_path);
        if (image == null) {
            System.out.println("Image is null"); //does not print
        }

    }

    @Override
    public void initialize(URL location, ResourceBundle resources) {
        logo.setImage(image);
        logo.setCache(true);
        label.setText(name);
    }
}

注意:您的代码将图像添加到标签注释的每个内容中,如果您需要将图像添加到每个标签中,请使用setGraphic(node);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ImageView不显示JPEG

来自分类Dev

JavaFX-选项卡中的FXML

来自分类Dev

ImageView不显示某些图像

来自分类Dev

如何使用FXML在JavaFX中动态创建选项卡?

来自分类Dev

虚拟ImageView不显示图像

来自分类Dev

JavaFX更改imageView中的图像

来自分类Dev

Javafx如何动态地向fxml文件中的现有选项卡添加内容

来自分类Dev

在imageview JavaFx上显示图像

来自分类Dev

JavaFX中的警报–导出jar后图标不显示

来自分类Dev

ImageView不显示图像钛

来自分类Dev

JavaFX setGraphic()在MenuItem中不显示图标

来自分类Dev

ImageView不显示圆角

来自分类Dev

删除后不显示ImageView

来自分类Dev

MenuButton在Javafx中不显示项目

来自分类Dev

ImageView不显示JPEG

来自分类Dev

javafx在新选项卡中动态打开新的fxml文件

来自分类Dev

JavaFX中的TextFlow不显示任何内容

来自分类Dev

JavaFX中ImageView的相交

来自分类Dev

Javafx如何动态地将内容添加到fxml文件中的现有选项卡

来自分类Dev

有时ImageView中的图像不显示

来自分类Dev

JavaFX动态TableView不显示数据库中的数据

来自分类Dev

在UIScrollView中不显示ImageView(目标C)

来自分类Dev

ImageView不显示图像钛

来自分类Dev

ImageView.setImageBitmap在RecyclerView中不显示图像

来自分类Dev

imageview不显示图像android

来自分类Dev

JavaFx 按钮不显示

来自分类Dev

JavaFX 中的旋转 ImageView

来自分类Dev

Angular slickgrid 不显示在动态选项卡内(ngx-bootstrap 选项卡集)

来自分类Dev

ImageView 不显示图像 src