JavaFX-覆盖WebView的光标更改 [英] JavaFX - Override WebView's Cursor Change

查看:72
本文介绍了JavaFX-覆盖WebView的光标更改的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在使用JavaFX库在Java中创建自己的Web浏览器应用程序的过程中,我发现WebView倾向于覆盖其他类所做的光标更改.由于我使用的是UNDECORATED窗口类型,因此我的计划是创建一个自定义大小调整类以模仿窗口大小调整功能.这涉及将光标更改为"RESIZE"类型.这确实可行,但是由于WebView元素没有边框并且不打算这样做;它会覆盖光标更改.我找不到WebView的光标更新事件.

In the process of creating my own web browser application in Java using the JavaFX library I found that WebView tends to override cursor changes made by other classes. Since I am using an UNDECORATED window type, my plan is to create a custom resizing class to mimic window resizing functionality; this involves changing the cursor to the "RESIZE" type. This does work, however since the WebView element has no border and does not plan to; it overrides the cursor change. I was unable to find an event for WebView's cursor update.

简而言之:如何强制更改光标(覆盖WebView).

In short: How can I forcefully change the cursor (overriding WebView).

注意:我试图在WebView修改光标后将其改回(我发现没有办法使用更改),但这导致以下错误:

Note: I have attempted to change the cursor back after WebView modifies it (I found no way to consume the change) but this resulted in the following error:

java.lang.StackOverflowError
at javafx.scene.Node$MiscProperties$6.invalidated(Node.java:6459)
at javafx.beans.property.ObjectPropertyBase.markInvalid(ObjectPropertyBase.java:111)
at javafx.beans.property.ObjectPropertyBase.set(ObjectPropertyBase.java:145)
at javafx.css.StyleableObjectProperty.set(StyleableObjectProperty.java:82)
at javafx.scene.Node.setCursor(Node.java:1160)
at to.us.thedjcreeper.thelightweb.nodes.WebTab.lambda$new$1(WebTab.java:28)
at to.us.thedjcreeper.thelightweb.nodes.WebTab$$Lambda$98/1896727623.changed(Unknown Source)
at com.sun.javafx.binding.ExpressionHelper$SingleChange.fireValueChangedEvent(ExpressionHelper.java:182)
at com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:81)
at javafx.beans.property.ObjectPropertyBase.fireValueChangedEvent(ObjectPropertyBase.java:105)
at javafx.beans.property.ObjectPropertyBase.markInvalid(ObjectPropertyBase.java:112)
at javafx.beans.property.ObjectPropertyBase.set(ObjectPropertyBase.java:145)
at javafx.css.StyleableObjectProperty.set(StyleableObjectProperty.java:82)
at javafx.scene.Node.setCursor(Node.java:1160)

代码:

webView.cursorProperty().addListener((observable, oldValue, newValue) -> {
    if (ResizeHelper.resizing && oldValue != newValue) webView.setCursor(oldValue);
});

推荐答案

您可以通过将WebView放置在StackPane中来设置边框,在其中可以设置其边距.要完成光标更改,请在下面添加另一个窗格,该窗格可以提供光标并可以记录鼠标的拖动事件:

You can add a border by placing the WebView in a StackPane, where you can set its margin. To accomplish the cursor change, add another pane underneath which can provide the cursor and can field mouse drag events:

double resizeBorderThickness = 6;
double cornerSize = 24;

Region n = new Region();
n.setCursor(Cursor.N_RESIZE);
n.setMinHeight(resizeBorderThickness);
Region s = new Region();
s.setCursor(Cursor.S_RESIZE);
s.setMinHeight(resizeBorderThickness);
Region e = new Region();
e.setCursor(Cursor.E_RESIZE);
e.setMinWidth(resizeBorderThickness);
Region w = new Region();
w.setCursor(Cursor.W_RESIZE);
w.setMinWidth(resizeBorderThickness);

Region nw = new Region();
nw.setCursor(Cursor.NW_RESIZE);
nw.setMinSize(cornerSize, cornerSize);
Region ne = new Region();
ne.setCursor(Cursor.NE_RESIZE);
ne.setMinSize(cornerSize, cornerSize);
Region sw = new Region();
sw.setCursor(Cursor.SW_RESIZE);
sw.setMinSize(cornerSize, cornerSize);
Region se = new Region();
se.setCursor(Cursor.SE_RESIZE);
se.setMinSize(cornerSize, cornerSize);

GridPane resizePane = new GridPane();
resizePane.addRow(0, nw, n, ne);
resizePane.addRow(2, sw, s, se);
resizePane.add(w, 0, 1);
resizePane.add(e, 2, 1);

GridPane.setHgrow(n, Priority.ALWAYS);
GridPane.setHgrow(s, Priority.ALWAYS);
GridPane.setVgrow(w, Priority.ALWAYS);
GridPane.setVgrow(e, Priority.ALWAYS);

StackPane stackPane = new StackPane(resizePane, webView);
StackPane.setMargin(webView, new Insets(resizeBorderThickness));

Scene scene = new Scene(stackPane);

这篇关于JavaFX-覆盖WebView的光标更改的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆