我想創建一個用戶可以平移和縮放的javafx 2的畫布。對於靜態內容,我的解決方案可以工作,但只要內容在用戶平移時更新,鼠標事件就會停止工作,直到釋放並再次按下鼠標按鈕。在javafx的畫布上平移
以下是演示該問題的最簡單示例。如果您點擊白色區域,您可以平移,但如果通過點擊紅色矩形開始平移,則在更新內容時它會中斷。
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的Windows 8 64位。
非常感謝您! setMouseTransparent(true)方法是我正在尋找的。其他的觀點也非常好,但是他們不適用於我的真實項目,只是對我的小例子來說,它們仍然是有效的點數! – Christian