我需要在点击后比较不同的图像值

时间:2018-03-17 00:35:06

标签: java javafx imageview listener conditional-statements

我未能找到有关我的困境的任何好问题。我试图计算/检查通过actionListener单击特定项目的次数,但不确定如何使用actionListener / EventHandler来记录单击。这是在JavaFX.Pardon中完成的,这可能是一个无用的问题。

        correctUrl = getCorrectUrl(); //Correct image for set
        wrongUrl = getWrongUrl();
        initialPos(); //everything is placed into default.

       imageOne.addEventHandler(MouseEvent.MOUSE_CLICKED, event -> {
           imageOne.setOnMouseClicked((MouseEvent e) -> {
               imageOne = flipToCard(imageOne, 1);
           });
            returnCardOne();
            System.out.println("Tile pressed ");
            event.consume();
        });

代码的最终目标是注意两个图像已被点击,然后检查他们的URL是否= =彼此。

1 个答案:

答案 0 :(得分:0)

如果.select span::before相等,URLs应该相等。那么为什么不比较Images?这个小应用程序演示了您要实现的目标。代码中的评论。

  

主:

Images
  

ImageViewTitle类:

import java.util.ArrayList;
import java.util.List;
import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;
import javafx.util.Duration;

/**
 *
 * @author Sedrick
 */
public class JavaFXApplication51 extends Application {

    @Override
    public void start(Stage primaryStage) {   
        List<ImageViewTile> imageViews = new ArrayList();
        List<ImageViewTile> cardsBeingMatched = new ArrayList();//Used to keep up with the current two cards that are pressed inorder to deteremine if they are a match
        Image initialImage = new Image(getClass().getResourceAsStream("cardBack_blue1.png"));
        Image ace = new Image(getClass().getResourceAsStream("cardSpadesA.png"));
        Image king = new Image(getClass().getResourceAsStream("cardSpadesK.png"));
        imageViews.add(new ImageViewTile(initialImage, ace));
        imageViews.add(new ImageViewTile(initialImage, king));
        imageViews.add(new ImageViewTile(initialImage, ace));
        imageViews.add(new ImageViewTile(initialImage, king));

        for(ImageViewTile view : imageViews)
        {
            //Set ImageViews' onMouseClicked handler
            view.setOnMouseClicked(event->{

                if(!view.isShowing())//If card face value is not showing 
                {
                    view.showFrontImage();//show it.
                    cardsBeingMatched.add(view);//Add card being clicked to list so it can be compared against the next card
                    if(cardsBeingMatched.size() == 2)//Once two cards are in the list, see if they are equal.
                    {
                        if(cardsBeingMatched.get(0).getImage().equals(cardsBeingMatched.get(1).getImage()))//If cards are equal a match is found
                        {
                            System.out.println("Match");
                            cardsBeingMatched.clear();//clear the list to prepare to compare the next two cards that are clicked
                        }
                        else//If cards are not equal
                        {
                            System.out.println("No match");
                            //wait half a second and flip cards back over
                            Timeline timeline = new Timeline(new KeyFrame(Duration.seconds(.5), (event1) -> {
                                System.out.println(".5 seconds need to pass before another mouse click!");
                            }));
                            timeline.setCycleCount(1);
                            timeline.play();
                            timeline.setOnFinished(event1->{
                                cardsBeingMatched.get(0).showBackImage();
                                cardsBeingMatched.get(1).showBackImage(); 
                                cardsBeingMatched.clear();//clear the list to prepare to compare the next two cards that are clicked
                            });                      
                        }
                    }                        
                }                
            });
        }

        GridPane root = new GridPane();
        for(int i = 0; i < imageViews.size(); i++)
        {
            root.add(imageViews.get(i), i % 2, i  / 2);//Add ImageViews to the GridPane
        }


        Scene scene = new Scene(root, 280, 380);

        primaryStage.setTitle("Hello World!");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }

}

我创建了这个课程,以帮助我跟上import javafx.scene.image.Image; import javafx.scene.image.ImageView; /** * * @author Sedrick */ public final class ImageViewTile extends ImageView{ private boolean showing; private final Image backImage; private final Image frontImage; public ImageViewTile(Image backImage, Image frontImage) { this.backImage = backImage; this.frontImage = frontImage; this.setImage(backImage); showing = false; } public void showBackImage() { this.setImage(backImage); showing = false; } public void showFrontImage() { this.setImage(frontImage); showing = true; } public boolean isShowing() { return showing; } } 个不同的状态。