Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Adding a Simple Button in java, but java is not allowing me to

Tags:

Ok so from my stand point my code is pretty decent enough to get a passing grade but I am having trouble adding a simple refresh/shuffle button. NOT USING the aids of JOptionPane. Eclipse doesnt seem to recognize that I have created the button which doesnt make sense at all for me because its telling me something about a Node which the Button is in fact a node and it is created. But when I go into another class and add another button with the 3 line example it simply works. But when I move it to my homework program it simply gives me an error on the add method which breaks the whole program! Says

"The method add(Node) in the type List is not applicable for the arguements (Button)"

Could anyone shed some light of where I could be going wrong in my code? It has to be something along the a node to string conversion or something I just cant seem to figure it out. Willing to take any hints given to me but please DO NOT SOLVE THE PROBLEM FOR ME.

Here is the question from the book basically. "Write a program that lets the user click the refresh button to display four cards from a deck of 54 cards."

I just need some help on the button thats all. I literally have the rest.

Here is my code so far. I Have left the imports out as there is just too many.

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Pane;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.stage.Stage;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import java.awt.Button;
import java.io.File;
import java.util.ArrayList;



public class Cards extends Application
{

    public void start(Stage primaryStage) 
    {
        ArrayList<String> cards = new ArrayList<>(); //Array list

        Shuffle(cards); //Shuffles the Cards

        String file1 = new File("cards" + "/" + cards.get(1) + ".png").toURI().toString();
        String file2 = new File("cards" + "/" + cards.get(2) + ".png").toURI().toString();
        String file3 = new File("cards" + "/" + cards.get(3) + ".png").toURI().toString();
        String file4 = new File("cards" + "/" + cards.get(4) + ".png").toURI().toString();

        Pane pane = new HBox(20); //Creates the Box for the Images
        pane.setPadding(new Insets(5, 5, 5, 5)); //Spreads the Images out


        Image image = new Image(file1); //Creates the String Image
        Image image2 = new Image(file2);
        Image image3 = new Image(file3);
        Image image4 = new Image(file4);

        pane.getChildren().add(new ImageView(image)); //Adds the First Image
        ImageView view1 = new ImageView(image);
        view1.setFitHeight(100);
        view1.setFitWidth(100);

        pane.getChildren().add(new ImageView(image2)); //Adds the Second Image
        ImageView view2 = new ImageView(image2);
        view2.setFitHeight(100);
        view2.setFitWidth(100);

        pane.getChildren().add(new ImageView(image3)); //Add the Third Image
        ImageView view3 = new ImageView(image3);
        view3.setFitHeight(100);
        view3.setFitWidth(100);

        pane.getChildren().add(new ImageView(image4)); //Add the Fourth Image
        ImageView view4 = new ImageView(image4);
        view4.setFitHeight(100);
        view4.setFitWidth(100);


        HBox hbox = new HBox(5); //Creates the Box for the Button

        Button shuffle = new Button("Shuffle"); //Creates the Button
        hbox.getChildren().add(shuffle); //Should add the button but doesn't
        shuffle.addActionListener( e -> //Listener for the button
        {
            Shuffle(cards);
        });


        BorderPane pane2 = new BorderPane();/ /Creates the Pane for the Button
        pane2.setCenter(pane); //Sets the cards in the Center
        pane2.setBottom(hbox); //Sets the Button on the bottom

        BorderPane.setAlignment(hbox, Pos.CENTER);
        hbox.setAlignment(Pos.BOTTOM_CENTER);//Aligns the Button to BOT_CENTER

        Scene scene = new Scene(pane2); //Creates the Scene
        primaryStage.setTitle("Cards");
        primaryStage.setScene(scene);
        primaryStage.show();


    }

    public void Shuffle(ArrayList<String> cards) 
    //Allows the cards to Shuffle when called. 
    {

        for (int i = 0; i <= 53; i++) //Sets the Number of Cards in Deck
            cards.add(String.valueOf(i+1));
        java.util.Collections.shuffle(cards);
    }

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

    }

}
like image 593
Vinnie Avatar asked Nov 08 '16 05:11

Vinnie


1 Answers

You're using the AWT-button with your import java.awt.Button;, that's why you can use the method public void addActionListener(ActionListener l).

Replace your import to import javafx.scene.control.Button;. Furthermore you could use (analogue to your code) the following lambda:

shuffle.setOnAction( (x) ->   //Listener for the button
{
    Shuffle(cards);
});

Give it a try :)

like image 70
SSchuette Avatar answered Sep 26 '22 16:09

SSchuette