2014-03-27 6 views
0

패키지 javafxapplication36;마우스를 클릭했을 때 무대에 물건 놓기

/** 
* Copyright (c) 2008, 2012 Oracle and/or its affiliates. 
* All rights reserved. Use is subject to license terms. 
*/ 
import javafx.application.Application; 
import javafx.scene.Group; 
import javafx.scene.Scene; 
import javafx.stage.Stage; 
import javafx.animation.KeyFrame; 
import javafx.animation.KeyValue; 
import javafx.animation.Timeline; 
import javafx.beans.InvalidationListener; 
import javafx.beans.Observable; 
import javafx.event.ActionEvent; 
import javafx.event.EventHandler; 
import javafx.geometry.VPos; 
import javafx.scene.Group; 
import javafx.scene.Node; 
import javafx.scene.control.Button; 
import javafx.scene.effect.DropShadow; 
import javafx.scene.effect.Lighting; 
import javafx.scene.input.MouseEvent; 
import javafx.scene.layout.HBox; 
import javafx.scene.layout.VBox; 
import javafx.scene.paint.Color; 
import javafx.scene.shape.Circle; 
import javafx.scene.shape.Rectangle; 
import javafx.scene.text.Text; 
import javafx.scene.text.TextAlignment; 
import javafx.util.Duration; 

/** 
* A sample that demonstrates how to add or remove a change listener on a node 
* (for example, a Rectangle node) for some property (for example, 
* Rectangle.hover). Once you add a listener, the text field shows the hover 
* property change. 
* 
* @see javafx.beans.value.ChangeListener 
* @see javafx.beans.InvalidationListener 
* @see javafx.beans.value.ObservableValue 
*/ 
public class ChangeListenerSample extends Application { 

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

    private void init(Stage primaryStage) { 
     final Group root = new Group(); 
     primaryStage.setResizable(false); 
     Scene scene = new Scene(root, 400,80); 
     primaryStage.setScene(scene); 

     //rect.addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() 
     scene.addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() { 
     @Override public void handle(MouseEvent event) { 
       Circle circle = new Circle(event.getSceneX(), event.getSceneY(),30); 
       circle.setFill(Color.YELLOW); 
       root.getChildren().add(circle); 
     } 
    }); 
    //root.getChildren().add(circle); 
    primaryStage.setScene(new Scene(root, 300, 250)); 
    primaryStage.show(); 
} 
} 

마우스를 눌렀을 때 무대에 서클을 넣으려고합니다. 그럴 수 없습니다. 나는 처음에 뿌리를 세우려고했으나 일어나지 않습니다. 감사합니다.

답변

1

코드에 몇 가지만 편집하면 완벽하게 작동하는 것 같습니다!

참고 : 처음에는 이미 장면에서 루트를 다시 설정할 필요가 없습니다!

동일하게 장면을 스테이지에 설정합니다.

import javafx.application.Application; 
import javafx.event.EventHandler; 
import javafx.scene.Group; 
import javafx.scene.Scene; 
import javafx.scene.input.MouseEvent; 
import javafx.scene.paint.Color; 
import javafx.scene.shape.Circle; 
import javafx.stage.Stage; 

/** 
* A sample that demonstrates how to add or remove a change listener on a node 
* (for example, a Rectangle node) for some property (for example, 
* Rectangle.hover). Once you add a listener, the text field shows the hover 
* property change. 
* 
* @see javafx.beans.value.ChangeListener 
* @see javafx.beans.InvalidationListener 
* @see javafx.beans.value.ObservableValue 
*/ 
public class ChangeListenerSample extends Application { 

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

    @Override 
    public void start(Stage primaryStage) throws Exception { 
     final Group root = new Group(); 
     primaryStage.setResizable(false); 
     Scene scene = new Scene(root, 400,80); 
     primaryStage.setScene(scene); 

     //rect.addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() 
     scene.addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() { 
     @Override public void handle(MouseEvent event) { 
       Circle circle = new Circle(event.getSceneX(), event.getSceneY(),30); 
       circle.setFill(Color.YELLOW); 
       root.getChildren().add(circle); 
     } 
     }); 
     //root.getChildren().add(circle); 
     primaryStage.show(); 

    } 
}