如何从文件加载图像

问题描述 投票:0回答:1

我有这个项目,我必须实现一个游戏。游戏是Yahtzee,掷骰子后我需要改变图片。因此,当我调用该函数并得到一个函数时,骰子图像应更改为另存为diceFace1(f.e.)的另一个。这是预加载的图像之一

<ImageView fx:id="dice1" fitHeight="66.0" fitWidth="75.0" nodeOrientation="INHERIT" pickOnBounds="true" preserveRatio="true">
<HBox.margin>
<Insets left="10.0" right="30.0" top="20.0" />
</HBox.margin>
<image>
<Image url="@../Dices/beforeRollDice.png" fx:id="dice1img"/>
</image>
</ImageView>

这是该函数的蓝图:

public void rollDice() {
        Dice Dice = new Dice();
        int diceVal = Dice.roll();
        File imgPath = new File("@../Dices/Side1.jpeg");
        System.out.println(diceVal);
        switch (diceVal) {
            case 1:
                dice1.setImage(new Image(imgPath.toURI().toString()));
                break;
            case 2:
                //dice1.setImage(new Image(imgPath.toURI().toString()));
                break;
            case 3:
                //dice1.setImage(new Image(imgPath.toURI().toString()));
                break;
            case 4:
                //dice1.setImage(new Image(imgPath.toURI().toString()));
                break;
            case 5:
                //dice1.setImage(new Image(imgPath.toURI().toString()));
                break;
            case 6:
                //dice1.setImage(new Image(imgPath.toURI().toString()));
                break;

        }

    }
}

问题是当我调用该函数时,新的图像将不会出现,而旧的图像将变为空白。

image file javafx imageview
1个回答
0
投票

以下是mre,演示从不同文件夹加载图像:

import java.io.File;
import java.net.URL;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.TilePane;
import javafx.stage.Stage;

public class ImagesFromFile extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception{
        primaryStage.setTitle("Load Images From File");
        primaryStage.setScene(new Scene(new ImagePanel()));
        primaryStage.show();
    }

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

/**
<pre>
Folders structure:

   -Project
    | - src
    |   | - package
    |   |       | - ImagePanel.java
    |   |       | - red_dot.png
    |   |
    |   | - resources
    |           | - blue_dot.png
    |
    | - black_dot.png
 </pre>
*/

class ImagePanel extends TilePane{

    public ImagePanel() {

        try{
            //not embedded resource. doesn't work when packaged in jar
            File file = new File("black_dot.png");
            Image imageFromProjectFolder = new Image(file.toURI().toString());
            ImageView view1 = new ImageView(imageFromProjectFolder);

            URL url = getClass().getResource("red_dot.png");
            Image imageFromSourceFolder = new Image(url.openStream());
            ImageView view2 = new ImageView(imageFromSourceFolder); //or new ImageView("/package/red_dot.png");

            url = getClass().getResource("/resources/blue_dot.png");
            Image imageFromReourceFolder = new Image(url.openStream());
            ImageView view3 = new ImageView(imageFromReourceFolder); //or new ImageView("/resources/blue_dot.png");

            getChildren().addAll(view1, view2, view3);
        } catch (Exception ex) {ex.printStackTrace();}
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.