我在使用JxBrowser引擎的Java中編寫一個簡單的應用程序,但我一開始就卡住了。在我的代碼中,有一個未修飾的stage
,我想讓它可拖動。要做到這一點,搜查,發現了以下鏈接:上stackPane
setOnMouseDragged在瀏覽器視圖上不工作
How to drag undecorated window
所以我設置mousePressed
和MouseDragged
事件,但只有mousePressed
事件被解僱,mouseDragged
事件沒有辦法被炒魷魚。任何想法是什麼問題?
在此先感謝。
import com.teamdev.jxbrowser.chromium.Browser;
import com.teamdev.jxbrowser.chromium.javafx.BrowserView;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
private static double xOffset = 0;
private static double yOffset = 0;
public class Main extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
Platform.setImplicitExit(false);
Browser browser = new Browser();
BrowserView browserView = new BrowserView(browser);
StackPane pane = new StackPane();
pane.getChildren().add(browserView);
Scene scene = new Scene(pane, 380, 500);
primaryStage.initStyle(StageStyle.UNDECORATED);
primaryStage.setScene(scene);
pane.setOnMousePressed(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
System.out.println("mouse pressed");
xOffset = primaryStage.getX() - event.getScreenX();
yOffset = primaryStage.getY() - event.getScreenY();
}
});
pane.setOnMouseDragged(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
System.out.println("mouse dragged");
primaryStage.setX(event.getScreenX() + xOffset);
primaryStage.setY(event.getScreenY() + yOffset);
}
});
primaryStage.show();
}
}
只是一個猜測:也許你應該在附加事件偵聽器之前調用'primaryStage.show();'。 – Benvorth
不幸的是沒有幫助:( –
因爲jxbrowser需要一個許可證我不能在本地進行測試。我的下一個猜測是將事件監聽器添加到窗格或瀏覽器本身 – Benvorth