首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaFX -覆盖WebView的光标更改

问JavaFX -覆盖WebView的光标更改
EN

Stack Overflow用户
提问于 2016-11-06 18:31:40
回答 2查看 689关注 0票数 1

在使用JavaFX库在Java中创建自己的web浏览器应用程序的过程中,我发现WebView倾向于覆盖其他类所做的游标更改。由于我使用的是未修饰的窗口类型,所以我的计划是创建一个定制的调整大小类,以模拟窗口大小调整功能;这涉及到将光标更改为“调整大小”类型。但是,这确实有效,因为WebView元素没有边框,也没有计划;它覆盖游标更改。我找不到WebView的游标更新事件。

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

注意:在WebView修改游标后,我尝试将它更改回原处(我找不到使用该更改的方法),但这导致了以下错误:

代码语言:javascript
复制
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)

代码:

代码语言:javascript
复制
webView.cursorProperty().addListener((observable, oldValue, newValue) -> {
    if (ResizeHelper.resizing && oldValue != newValue) webView.setCursor(oldValue);
});
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-06 19:29:03

您可以通过将WebView放置在StackPane中添加边框,在这里可以设置其边距。若要完成光标更改,请添加另一个窗格,在该窗格下可以提供光标并可以字段鼠标拖动事件:

代码语言:javascript
复制
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);
票数 1
EN

Stack Overflow用户

发布于 2016-11-06 22:29:27

这是内置在WebVew中的:

代码语言:javascript
复制
webView.getEngine().inheritCursor(false);

这将不允许webView更改游标并允许您修改游标。但是,我建议您只在需要修改游标类型时才将其设置为false。

文档:https://docs.oracle.com/javase/8/javafx/api/javafx/beans/property/InheritCursor.html

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40452987

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档