簡體   English   中英

如何讓我的 javafx 代碼計算我點擊圖像的次數?

[英]how can I make my javafx code count how many times I clicked on an image?

我制作了這個 java 代碼,它在屏幕上的隨機位置顯示圖像,每當我點擊圖像時,它就會移動到另一個隨機位置。 我希望代碼打印出“命中”並計算我命中圖像的次數。 出於某種原因,它不斷返回 1。

public class Main2 extends Application {
    ImagePane root = new ImagePane();
    @Override
    public void start(Stage primaryStage) {
        Scene scene = new Scene(root, 500,500);
        scene.setCursor(Cursor.CROSSHAIR);
        primaryStage.setScene(scene);
        primaryStage.show();
        
    }
    
    
    
    public class Handler implements EventHandler<MouseEvent>{
        public void handle(MouseEvent e) {
            root.setPosition();
            System.out.println("Hit");
            int count = 1;
            System.out.println(count++);
        }
    }
    
    
    
    public class ImagePane extends Pane{
        ImageView o = new ImageView();
        Image image = new Image("file:head2.png");
        public ImagePane() {
            getChildren().add(o);
            o.setImage(image);
            o.setFitHeight(70);
            o.setFitWidth(70);
            o.setX(Math.random()*1080);
            o.setY(Math.random()*1080);
            o.setOnMouseClicked(new Handler());
            }
        public void setPosition() {
            o.setX(Math.random()*1080);
            o.setY(Math.random()*1080);
            o.setOnMouseClicked(new Handler());
        }
    }
    
    
    public static void main(String[] args) {
        launch(args);
    }
}

嘗試將count聲明從handle()移出。

public class Handler implements EventHandler<MouseEvent>{
        int count;
        public void handle(MouseEvent e) {
            root.setPosition();
            System.out.println("Hit");
            System.out.println(count++);
        }
    }

Main2創建Handler類的Main2

Handler handler = new Handler();

並使用此實例而不是每次都添加新的。

o.setOnMouseClicked(handler);

為此,您必須為 ImagePane 創建一個構造函數,並將handler作為參數。
換句話說,您需要在每個地方使用相同的實例 od Handler。

試試這個,它對我有用

ImagePane root = new ImagePane();

@Override
public void start(Stage primaryStage) {

    Scene scene = new Scene(root, 900, 1000);
    scene.setCursor(Cursor.CROSSHAIR);
    primaryStage.setScene(scene);
    primaryStage.show();

}

int count = 1;

public class Handler implements EventHandler<MouseEvent> {

    public void handle(MouseEvent e) {
        root.setPosition();
        System.out.println("Hit: " + count++);

    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM