在java中添加一个简单的按钮,但java不允许我这样做

2022-01-24 00:00:00 button shuffle java javafx imageview

好的,所以从我的角度来看,我的代码相当不错,足以获得及格分数,但我无法添加一个简单的刷新/随机播放按钮.不使用 JOptionPane 的帮助.Eclipse 似乎没有认识到我创建了对我来说根本没有意义的按钮,因为它告诉我一些关于节点的信息,该按钮实际上是一个节点并且它被创建了.但是,当我进入另一个班级并使用 3 行示例添加另一个按钮时,它就可以正常工作.但是当我把它移到我的作业程序中时,它只会给我一个 add 方法的错误,这会破坏整个程序!说

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

List类型中的add(Node)方法不适用于论点(Button)"

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

谁能说明我的代码哪里出错了?它必须是沿着a节点到字符串转换的东西,或者我似乎无法弄清楚的东西.愿意接受给我的任何提示,但请不要为我解决问题.

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.

这基本上是书中的问题.编写一个程序,让用户单击刷新按钮以显示一副 54 张卡片中的四张卡片."

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);

    }

}

推荐答案

你正在使用 AWT 按钮和你的 import java.awt.Button;,这就是为什么你可以使用方法 <代码>public void addActionListener(ActionListener l).

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).

将您的导入替换为 import javafx.scene.control.Button;.此外,您可以使用(类似于您的代码)以下 lambda:

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);
});

试一试:)

相关文章