圈子的数组在老鼠事件上把阶段放

时间:2014-03-29 20:08:36

标签: javafx mouseevent

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

    }
}

我试图将圈子放在我通过鼠标事件点击舞台的同一个地方,Netbeans一直运行或抛出异常。

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

1 个答案:

答案 0 :(得分:1)

您的代码中存在一些问题。

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

的东西
root.getChildren().add(listOfCircles);
在开始动画之前

将起作用。

您还可以使用根节点(“root”)创建场景,但是您永远不会将场景放在窗口中(JavaFX术语中的“舞台”)或显示窗口。 取消注释行

primaryStage.setScene(new Scene(root, 300, 250));

primaryStage.setScene(scene);

也许值得从更简单的东西开始:可能是Hello World中的standard tutorial,并在那里试验代码以了解每行的作用。