在我的程序中,长按/单击按钮时需要执行一个操作。 因此,我决定创建一个方法来获取按钮的参数,并在按钮单击时间超过1秒时返回一个布尔值: } MAIN.JAVA 但是每次我快速单击按钮时,它都会显示几个“ PRESSED !!!” 所以它不起作用。 2000000000 ...
提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供 中文繁体 英文版本 中英对照 版本,有任何建议请联系yoyou2525@163.com。
我正在尝试从 Udemy 课程中学习 Java,并且在进入以下部分之前,我被要求创建一个作业。
任务是编写一个 JavaFX 应用程序,该应用程序显示一个圆圈和一个按钮,每次按下所述按钮时,圆圈应移动到随机位置。
到目前为止,我已经创建了一个代码来计算我单击按钮的次数,现在我想将圆圈与计数一起移动:
public class CircleJumper extends Application {
// Declare Variables
private int count;
private Circle initCircle;
private Button initButton;
private Text countText;
/*
*
* Write function here
*
*/
@Override
public void start(Stage primaryStage){
// Initiate Variables
count = 0;
initCircle = new Circle(30, -50, 30);
initButton = new Button("Click Me!");
countText = new Text("Clicks: 0");
// Here its where I built the click counter
initButton.setOnAction((event) -> {
count++;
countText.setText("Pushes: " + count);
});
;
Group baseDemo = new Group(initButton, countText);
FlowPane pane = new FlowPane(baseDemo, initCircle);
pane.setAlignment(Pos.CENTER);
pane.setHgap(20);
pane.setStyle("-fx-background-color: cyan");
Scene scene = new Scene(pane, 600, 300);
primaryStage.setTitle("Draw a Circle when Button is Pressed");
primaryStage.setScene(scene);
primaryStage.show();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
launch(args);
}
}
更新:我决定将我的变量计数声明为 = Math.random(); 并创建了一个圆圈。 之后,单击按钮应该会获取生成的 Math.random 并将其放入 setTranslate 中,对吗?
public void start(Stage primaryStage){
// Initiate Variables
count = Math.random();
initCircle = new Circle(30, 50, 30);
initButton = new Button("Click Me!");
Group circlePos = new Group(initCircle);
circlePos.setTranslateX(10);
circlePos.setTranslateY(10);
initButton.setOnAction((event) -> {
count++;
circlePos.setTranslateY(count);
circlePos.setTranslateX(count);
});
Group baseDemo = new Group(initButton);
FlowPane pane = new FlowPane(baseDemo, initCircle);
pane.setAlignment(Pos.CENTER);
pane.setHgap(20);
pane.setStyle("-fx-background-color: cyan");
Scene scene = new Scene(pane, 600, 300);
primaryStage.setTitle("Draw a Circle when Button is Pressed");
primaryStage.setScene(scene);
primaryStage.show();
}
首先自己尝试一下,但我会发布一个解决方案,以便您可以看到它是如何完成的,以防您遇到困难。
random.nextInt(bound)
从随机数中获取几个整数。centerX
和centerY
设置为您的随机值。好的,还没有完全完成,当你尝试它时会发现问题(你应该这样做)是它不起作用,圆圈似乎不会以你设置的 x 和 y 值为中心。 这是因为 Circle 位于布局窗格 (FlowPane) 中,它将忽略您的手动布局设置(尽管不转换值)。 解决方案是将圆圈放入组中(作为第一项,使其位于所有内容下方),然后将流窗格放入组中,在 FlowPane 中您有您的按钮并单击计数器。
您可能希望将 translateX/Y 保留为 animation 而不是布局,尽管它可以用于移动形状并且也可以因此使用。
import javafx.application.Application;
import javafx.scene.*;
import javafx.scene.control.Button;
import javafx.scene.layout.FlowPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.text.Text;
import javafx.stage.Stage;
import java.util.Random;
public class CircleJumper extends Application {
private static final double MAX_X = 600;
private static final double MAX_Y = 300;
private int clickCount = 0;
private Random random;
@Override
public void init() {
random = new Random();
}
@Override
public void start(Stage stage){
Circle circle = new Circle(MAX_X / 2, MAX_Y / 2, 30);
Button button = new Button("Click Me!");
Text clickCountText = new Text("Clicks: " + clickCount);
button.setOnAction((event) -> {
clickCount++;
clickCountText.setText("Clicks: " + clickCount);
circle.setCenterX(random.nextInt((int) MAX_X));
circle.setCenterY(random.nextInt((int) MAX_Y));
});
Group layout = new Group(
circle,
new FlowPane(button, clickCountText)
);
stage.setScene(new Scene(layout, MAX_X, MAX_Y, Color.CYAN));
stage.setResizable(false);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.