使用JavaFX的Dice Simulator,图像未出现

时间:2019-11-17 17:15:33

标签: java javafx imageview simulator dice

我一直在尝试创建一个骰子模拟器,在这里我将创建一个JavaFX应用程序来模拟掷骰子。当用户单击一个按钮时,我的应用程序将生成两个随机数,每个随机数在1到6的范围内,代表骰子的值。然后,我的应用程序将使用ImageView控件显示骰子。

一切正常,除了我的骰子图像不会出现的事实。我也没有收到任何错误,应用程序运行正常。我在做什么错,为什么我的骰子图像不会出现?非常感谢任何帮助,谢谢大家。

DieRoll类

import java.util.Random;

public class DieRoll 
{
    int rollNum;
    int sides = 6;

    public void roll()
    {
        Random rand = new Random();
        rollNum = rand.nextInt(sides) + 1;
    }

    public int getRoll()
    {
        return rollNum;
    }
}

DieImages类

import javafx.scene.image.Image;

public class DieImages 
{
    Image pic1 = new Image("file:images/1Die.bmp");
    Image pic2 = new Image("file:images/2Die.bmp");
    Image pic3 = new Image("file:images/3Die.bmp");
    Image pic4 = new Image("file:images/4Die.bmp");
    Image pic5 = new Image("file:images/5Die.bmp");
    Image pic6 = new Image("file:images/6Die.bmp");

    private int value;
    private Image dieImage = pic1;

    public void setImage(int sides)
    {
        int value = sides;
        if(value == 1)
            dieImage = pic1;
        if(value == 2)
            dieImage = pic2;
        if(value == 3)
            dieImage = pic3;
        if(value == 4)
            dieImage = pic4;
        if(value == 5)
            dieImage = pic5;
        if(value == 6)
            dieImage = pic6;
    }

    public Image getImage()
    {
        return dieImage;
    }

}

DiceSimulator类

import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.layout.VBox;
import javafx.scene.layout.HBox;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Pos;
import javafx.geometry.Insets;
import java.util.Random;

public class DiceSimulator extends Application
{
     private ImageView viewDie1 = new ImageView();
     private ImageView viewDie2 = new ImageView();
     private Label resultDie;
     private Label message1;
     private Label message2;

     public static void main(String[] args)
       {
          // Launch the application.
          launch(args);
       }

       @Override
       public void start(Stage primaryStage)
       {
           primaryStage.setTitle("Dice Simulator");
           Label message1 = new Label("Welcome to the Dice Simulator!");
           Label message2 = new Label("Please hit start to roll the dice!");

           resultDie = new Label();
           Button startButton = new Button("Start!");

           startButton.setOnAction(new StartButtonHandler()); 

           HBox hbox = new HBox(10, viewDie1, viewDie2);

           VBox vbox = new VBox(10, message1, message2, startButton, hbox, resultDie);
           vbox.setPadding(new Insets(15));
           vbox.setAlignment(Pos.CENTER);

           Scene simulatorScene = new Scene(vbox);
           primaryStage.setScene(simulatorScene);
           primaryStage.show();


       }

       class StartButtonHandler implements EventHandler<ActionEvent>
       {
           @Override
           public void handle(ActionEvent event)
           {
               int num1 = 0;
               int num2 = 0;
               Image diePic1; 
               Image diePic2;

               DieRoll dieI = new DieRoll();
               DieRoll dieII = new DieRoll();
               dieI.roll();
               dieII.roll();
               num1 = dieI.getRoll();
               num2 = dieII.getRoll();

               DieImages image1 = new DieImages();
               DieImages image2 = new DieImages();
               image1.setImage(num1);
               image1.setImage(num2);
               diePic1 = image1.getImage();
               diePic2 = image2.getImage();

               viewDie1 = new ImageView(diePic1);
               viewDie2 = new ImageView(diePic2);

               resultDie.setText("You rolled a " + num1 + " and " + num2 + "!");
           }
       }


}

1 个答案:

答案 0 :(得分:1)

Java找不到您要显示的文件,为什么JavaFX不会抛出错误,也没有线索。

相对位置(如您现在指定的位置)从Java文件开始(如果单独运行文件),或者从项目根目录开始(如果通过ide运行文件)。

出于测试目的,请尝试使用绝对位置指定文件位置,例如对于Linux为/home/user/images/1Die.bmp,对于Windows为C:\Users\user\images\1Die.bmp