0

I am trying to create a dice rolling GUI in javafx. the program should display a die with a button, and when the button is clicked it should change the image o the corresponding random number. I am not sure how to get my button to work. Below is the code I have written and my Die class:

public class Die {

   protected int sideShowing;

   public Die() {

   }

   public void roll() {
      sideShowing = (int)(Math.random()*6) + 1;
   }

   public int getValue() {
      return sideShowing;
   }

   @Override
   public String toString(){
      switch(sideShowing){
         case 1: return "One";
         case 2: return "Two";
         case 3: return "Three";
         case 4: return "Four";
         case 5: return "Five";
         case 6: return "Six";
         default: return "No side";
      }
   }

 @Override
   public boolean equals(Object o){
      if(o instanceof Die){
         return this.getValue() == ((Die)o).getValue();
      }else{
         return false;
      }
   }

}
import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.scene.shape.Rectangle;
import javafx.scene.paint.Color;
import javafx.scene.image.ImageView;
import javafx.scene.image.Image;
import javafx.scene.text.Text;
import javafx.geometry.Pos;
import javafx.scene.layout.VBox;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.scene.layout.FlowPane;
import javafx.scene.control.ComboBox;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;

public class DiceRoll extends Application{
   //add the start method
   @Override
   public void start(Stage primaryStage){

   Rectangle r1 = new Rectangle(300, 200);
   r1.setFill(Color.WHITE);

   Die die1 = new Die();
   Die die2 = new Die();

   die1.getValue();
   die2.getValue();

   Image image = new Image("Dice1.png");
   ImageView Dice1 = new ImageView(image);
      Dice1.setFitHeight(50);
      Dice1.setFitWidth(50);

   Image image2 = new Image("Dice2.png");
   ImageView Dice2 = new ImageView(image2);
      Dice2.setFitHeight(50);
      Dice2.setFitWidth(50);

   Image image3 = new Image("Dice3.png");
   ImageView Dice3 = new ImageView(image3);
      Dice3.setFitHeight(50);
      Dice3.setFitWidth(50);

   Image image4 = new Image("Dice4.png");
   ImageView Dice4 = new ImageView(image4);
      Dice4.setFitHeight(50);
      Dice4.setFitWidth(50);

   Image image5 = new Image("Dice5.png");
   ImageView Dice5 = new ImageView(image5);
      Dice5.setFitHeight(50);
      Dice5.setFitWidth(50);

   Image image6 = new Image("Dice6.png");
   ImageView Dice6 = new ImageView(image6);
      Dice6.setFitHeight(50);
      Dice6.setFitWidth(50);

   VBox vBox = new VBox(50);
   vBox.setAlignment(Pos.BASELINE_LEFT);


   Button btn = new Button();
    btn.setText("Roll Die!");
    btn.setOnAction(new EventHandler<ActionEvent>() {
        @Override
        public void handle(ActionEvent event) {
             if(die1.toString() == "one"){
               vBox.getChildren().add(Dice1);

             }
             else if(die1.toString() == "two"){
               vBox.getChildren().add(Dice2);

             }
             else if(die1.toString() == "three"){
               vBox.getChildren().add(Dice3); 

             }
             else if(die1.toString() == "four"){
               vBox.getChildren().add(Dice4);

             }
             else if(die1.toString() == "five"){
               vBox.getChildren().add(Dice5);

             }
             else if(die1.toString() == "six"){
               vBox.getChildren().add(Dice6);

             }
        }
    });  

   StackPane sPane = new StackPane();
   sPane.getChildren().add(vBox);

   VBox vBox2 = new VBox(50);
   vBox2.setAlignment(Pos.BOTTOM_CENTER);
   vBox2.getChildren().add(sPane); //Dice

   StackPane sPane2 = new StackPane();
   sPane2.getChildren().add(r1);
   sPane2.getChildren().add(sPane);
   sPane2.getChildren().add(vBox2);

   VBox vBox3 = new VBox(20);
   vBox3.setAlignment(Pos.BOTTOM_RIGHT);
   vBox3.getChildren().addAll(btn);

   FlowPane fPane = new FlowPane(20, 20);
   fPane.getChildren().addAll(vBox, sPane2, vBox3);


   Scene scene = new Scene(fPane, 300, 400);

   primaryStage.setTitle("JavaFX Example");
   primaryStage.setScene(scene);
   primaryStage.show();   

   }

   public static void main(String[] args){
      Application.launch(args);  


   }

}

Any help or suggestions would be greatly appreciated, thank you.

James_D
  • 201,275
  • 16
  • 291
  • 322
  • Maybe you should post your javafx code –  Dec 13 '17 at 19:39
  • 3
    StackOverflow is a place for more specific questions, rather than 'why isn't this working?' either give more details on what's going wrong or maybe try posting on the Code Review stack exchange over here: https://codereview.stackexchange.com – MMAdams Dec 13 '17 at 19:40
  • @MouseEvent my bad –  Dec 13 '17 at 19:41
  • There are just a lot of errors here: probably way too many for a SO question. (Just off the top of my head: incorrect string comparison, you should compare the int value anyway. You don't `roll()` the dice. You add the images repeatedly but never remove them.) You need to break things down into smaller steps in order to find your errors. – James_D Dec 13 '17 at 19:42

0 Answers0