鼠标事件舞台上的圆圈阵列 导入javafx.animation.animation; 导入javafx.animation.KeyFrame; 导入javafx.animation.KeyValue; 导入javafx.animation.PauseTransitionBuilder; 导入javafx.animation.SequentialTransitionBuilder; 导入javafx.animation.Timeline; 导入javafx.animation.TranslateTransitionBuilder; 导入javafx.application.application; 导入静态javafx.application.application.launch; 导入javafx.event.ActionEvent; 导入javafx.event.EventHandler; 导入javafx.scene.Group; 导入javafx.scene.Node; 导入javafx.scene.scene; 导入javafx.scene.control.Button; 导入javafx.scene.input.MouseEvent; 导入javafx.scene.layout.StackPane; 导入javafx.scene.paint.Color; 导入javafx.scene.shape.Circle; 导入javafx.scene.shape.Rectangle; 导入javafx.stage.stage; 导入javafx.stage.StageStyle; 导入javafx.util.Duration; 公共类Temp4扩展了应用程序{ 私人动画; 公共静态void main(字符串[]args){ 发射(args); } @凌驾 公共作废开始(最终阶段初级阶段){ 最终组根=新组(); 场景=新场景(根); //使舞台透明 //initStyle(StageStyle.TRANSPARENT); 场景.设置填充(颜色.透明); //矩形rect=新矩形(0,0,300,300); //矩形设置填充(颜色为红色); //鼠标单击添加圆 scene.addEventHandler(MouseEvent.MOUSE_单击,新建EventHandler(){ 时间线=新时间线(); @凌驾 公共无效句柄(MouseEvent me){ Group listOfCircles=新组(); 对于(int i=0;i

鼠标事件舞台上的圆圈阵列 导入javafx.animation.animation; 导入javafx.animation.KeyFrame; 导入javafx.animation.KeyValue; 导入javafx.animation.PauseTransitionBuilder; 导入javafx.animation.SequentialTransitionBuilder; 导入javafx.animation.Timeline; 导入javafx.animation.TranslateTransitionBuilder; 导入javafx.application.application; 导入静态javafx.application.application.launch; 导入javafx.event.ActionEvent; 导入javafx.event.EventHandler; 导入javafx.scene.Group; 导入javafx.scene.Node; 导入javafx.scene.scene; 导入javafx.scene.control.Button; 导入javafx.scene.input.MouseEvent; 导入javafx.scene.layout.StackPane; 导入javafx.scene.paint.Color; 导入javafx.scene.shape.Circle; 导入javafx.scene.shape.Rectangle; 导入javafx.stage.stage; 导入javafx.stage.StageStyle; 导入javafx.util.Duration; 公共类Temp4扩展了应用程序{ 私人动画; 公共静态void main(字符串[]args){ 发射(args); } @凌驾 公共作废开始(最终阶段初级阶段){ 最终组根=新组(); 场景=新场景(根); //使舞台透明 //initStyle(StageStyle.TRANSPARENT); 场景.设置填充(颜色.透明); //矩形rect=新矩形(0,0,300,300); //矩形设置填充(颜色为红色); //鼠标单击添加圆 scene.addEventHandler(MouseEvent.MOUSE_单击,新建EventHandler(){ 时间线=新时间线(); @凌驾 公共无效句柄(MouseEvent me){ Group listOfCircles=新组(); 对于(int i=0;i,javafx,mouseevent,Javafx,Mouseevent,我试图通过鼠标事件将圆圈放在我点击舞台的同一位置,Netbeans会永远运行,或者抛出异常 我没有创建包类。我是javafx新手。如果包类是必需的???那么代码中有一些错误 单击鼠标时,您将创建一个包含五个圆的组(您称之为“listOfCircles”),但决不能将其作为场景的一部分。您需要以某种方式将其放入场景图中:调用 import javafx.animation.Animation; import javafx.animation.KeyFrame; import javafx.anim

我试图通过鼠标事件将圆圈放在我点击舞台的同一位置,Netbeans会永远运行,或者抛出异常


我没有创建包类。我是javafx新手。如果包类是必需的???

那么代码中有一些错误

单击鼠标时,您将创建一个包含五个圆的组(您称之为“listOfCircles”),但决不能将其作为场景的一部分。您需要以某种方式将其放入场景图中:调用

import javafx.animation.Animation;
import javafx.animation.KeyFrame;
import javafx.animation.KeyValue;
import javafx.animation.PauseTransitionBuilder;
import javafx.animation.SequentialTransitionBuilder;
import javafx.animation.Timeline;
import javafx.animation.TranslateTransitionBuilder;
import javafx.application.Application;
import static javafx.application.Application.launch;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
import javafx.util.Duration;

public class Temp4 extends Application {
    private Animation animation;

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

@Override
public void start(final Stage primaryStage) {
    final Group root = new Group();
    Scene scene = new Scene(root);
    //Make stage transparent 
    //primaryStage.initStyle(StageStyle.TRANSPARENT);
    scene.setFill(Color.TRANSPARENT);
    //Rectangle rect = new Rectangle(0, 0, 300, 300);
    //rect.setFill(Color.RED);

    // Adding circles at Mouse Click 
    scene.addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>(){    

        Timeline timeline = new Timeline();
        @Override
        public void handle(MouseEvent me){
             Group listOfCircles = new Group();
             for(int i=0; i < 5; i++){
                 Circle circle = new Circle(50*Math.random());
                 Color c = new Color(Math.random(),Math.random(),Math.random(),1.0);
                 circle.setFill(c);
                 listOfCircles.getChildren().add(circle);
                 }
                 for (Node circle : listOfCircles.getChildren()){
                     timeline.getKeyFrames().addAll(
                             new KeyFrame(Duration.ZERO, 
                             new KeyValue(circle.translateXProperty(),800),
                             new KeyValue(circle.translateYProperty(),500)
                             ), 
                             new KeyFrame(new Duration(2000), 
                             new KeyValue(circle.translateXProperty(),me.getSceneX()+10),
                             new KeyValue(circle.translateYProperty(),me.getSceneY()+10)
                             ));                                   
              }
              timeline.play();
              primaryStage.show();   

            }

          });       


    //scene.addEventHandler(MouseEvent.MOUSE_RELEASED, new EventHandler<MouseEvent>() {        
      //                      public void handle(MouseEvent me2){
        //                    scene.getChildren().clear();
          //          }  
   // });





    //public double getSampleWidth() { return 400; }

//    public double getSampleHeight() { return 150; }


    //root.getChildren().add();
    //primaryStage.setScene(new Scene(root, 300, 250));
    //primaryStage.initStyle(StageStyle.TRANSPARENT);
    //primaryStage.setScene(scene);

    }
}
在开始之前,动画将正常工作

您还可以使用根节点(“根”)创建场景,但从未将场景放入窗口(JavaFX术语中的“stage”)或显示窗口。 取消对行的注释

root.getChildren().add(listOfCircles);


也许值得从更简单的东西开始:也许从开始,并在那里用代码进行实验,以了解每一行的作用。

将类放入包中不是强制性的,但强烈建议这样做;对于像这样的应用程序,看起来您只是在试验,使用“默认包”是可以的。
primaryStage.setScene(new Scene(root, 300, 250));
primaryStage.setScene(scene);