ユーザーがパンおよびズームできるjavafx2を使用してキャンバスを作成しようとしています。静的コンテンツの場合、私のソリューションは機能しますが、ユーザーがパンしている間にコンテンツが更新されるとすぐに、マウスボタンを離してもう一度押すまで、マウスイベントは機能しなくなります。
以下は、問題を示す最小限の例です。白い領域をクリックするとパンできますが、赤い長方形をクリックしてパンを開始すると、コンテンツが更新されたときに中断されます。
class Test extends StackPane
{
private Timer timer = new Timer();
private Rectangle rect;
private double pressedX, pressedY;
public Test()
{
setMinSize(600, 600);
setStyle("-fx-border-color: blue;");
timer.schedule(new TimerTask()
{
@Override
public void run()
{
Platform.runLater(new Runnable()
{
@Override
public void run()
{
if (rect != null)
getChildren().remove(rect);
rect = new Rectangle(10, 10, 200, 200);
rect.setFill(Color.RED);
getChildren().add(rect);
}
});
}
}, 0, 100);
setOnMousePressed(new EventHandler<MouseEvent>()
{
public void handle(MouseEvent event)
{
pressedX = event.getX();
pressedY = event.getY();
}
});
setOnMouseDragged(new EventHandler<MouseEvent>()
{
public void handle(MouseEvent event)
{
setTranslateX(getTranslateX() + event.getX() - pressedX);
setTranslateY(getTranslateY() + event.getY() - pressedY);
event.consume();
}
});
}
}
public class TestApp extends Application
{
public static void main(String[] args)
{
launch(args);
}
@Override
public void start(Stage primaryStage)
{
Scene scene = new Scene(new Test());
primaryStage.setScene(scene);
primaryStage.show();
}
}
私はJDJ7u7を搭載したWindows864ビットを使用しています。