Estoy convirtiendo una aplicación Swing/Graphics2D con mucha pintura personalizada en una aplicación JavaFX2. Aunque me encanta la nueva API, parece que tengo un problema de rendimiento al pintar una elipse que quiero pintar debajo del cursor del mouse donde sea que se mueva el mouse. Cuando muevo el mouse de manera firme, no ridículamente rápido, noto que la elipse siempre se dibuja unos centímetros atrás en el recorrido del mouse, y solo se levanta cuando dejo de mover el cursor. Esto en un scenegraph con solo un puñado de nodos. En mi aplicación Swing no tuve ese problema.forma correcta de mover un nodo arrastrando en javafx 2?
Me pregunto si este es el enfoque correcto para dibujar una forma donde está el mousecursor?
import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.SceneBuilder;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Ellipse;
import javafx.scene.shape.EllipseBuilder;
import javafx.stage.Stage;
public class TestApp extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
Pane p = new Pane();
final Ellipse ellipse = EllipseBuilder.create().radiusX(10).radiusY(10).fill(Color.RED).build();
p.getChildren().add(ellipse);
p.setOnMouseMoved(new EventHandler<MouseEvent>() {
public void handle(MouseEvent event) {
ellipse.setCenterX(event.getX());
ellipse.setCenterY(event.getY());
}
});
Scene scene = SceneBuilder.create().root(p).width(1024d).height(768d).build();
primaryStage.setScene(scene);
primaryStage.show();
}
}
Pequeña actualización: He actualizado a JavaFX 2.2 y Java7u6 (en Windows 7 64 bits), no parece hacer una diferencia sin embargo.
Su solución en sí me ha ayudado mucho, gracias! – Matteo
Me alegra que te haya ayudado :) –