JavaFX自定义CSS光标

5
我正在搜索互联网,但找不到如何在JavaFX中使用CSS设置自定义光标的方法。我知道可以通过ImageCursor来设置自定义光标,像这样:

如何在JavaFX中创建自定义光标?

但是当我在css中使用以下代码时,它并不能生效:

setStyle("-fx-cursor:url('/images/pencil.png')");

是否有可能使用 css 创建自定义样式?


1
@GoXr3Plus:在javafx-8javafx-2中,许多事情都是类似的。在这种情况下,两者的概念应该是相同的。现在,javafx标签或多或少被用作这些javafx版本的同义词。保留它可能会使您的问题更容易找到并获得更多关注。回滚的主要原因是缺乏任何指示编辑是否合理(我可能错过了您和编辑之间的某些通信)。顺便说一句:在标签中仅添加一些信息从来不是一个好主意。在P的历史记录中,这似乎只是一个特别糟糕的编辑。 - fabian
2
这对我来说真的很奇怪。根据CSS参考指南,"-fx-cursor"应该接受标准的"<url>",因此你的尝试应该是正确的。我也在一个Button上尝试过:无效的URL不会发生任何事情,有效的URL会抛出ClassCastException。我还尝试在Java代码中使用已解析的URL(从调试堆栈中获取)成功地像这样button.setCursor(new ImageCursor(new Image("file:\\..."))); - DVarga
@GoXr3Plus 是的,这就是我所说的。只有在Java代码中设置了光标而不是在CSS文件中才能成功,但是从CSS中解析出的文件路径似乎是正确的(因为在Java中使用它时它是有效的)。我现在真的很好奇 - 对我来说,目前似乎是一个错误(我希望有人能证明我是相反的:))。 - DVarga
3
我在去年的OpenJDK中发现了一个有关此问题的缺陷报告,该问题仍未得到解决:fx-cursor doesn't render a ImageCursor using the provided URL - Jorn Vernee
3
这就是错误报告所提到的错误;)。我进行了许多调试,并发现存在一个转换器,将CSS值转换为“Cursor”对象,其中包括URL的情况。将光标设置为除URL以外的任何内容都会调用转换器,但使用URL时不会调用转换器,并且将原始路径(字符串)设置为光标值。似乎,如果您想使用自定义光标,则目前只能使用“ImageCursor”方式,因为存在这个 bug。 - Jorn Vernee
显示剩余10条评论
1个回答

1

更新

我注意到原始示例使用了

setStyle("-fx-cursor:url('/images/pencil.png')");

触发异常的代码似乎是一个错误:

然而,如果要按照CSS的方式指定自定义光标,则需要按照下面所示进行操作。


原始答案

当使用自定义CSS光标时,非URL回退(其他一个或多个值)必须位于回退列表的末尾,即auto,因此您的代码需要像这样:

//---------------------------------------------- ↓
setStyle("-fx-cursor:url('/images/pencil.png'),auto");

我正在努力理解你为什么在回答中链接到Web Cursor,但是提供了JavaFX Cursor的CSS - 它们很不相同。我很好奇你是否让它工作了,但是由于上面评论中提到的错误,我有些怀疑。 - Brad Turek
1
当我尝试运行你的代码时,出现了ClassCastException: java.lang.String cannot be cast to javafx.scene.Cursor的异常。 - Brad Turek
@BradTurek -- 由于关于错误的评论是在我的回答之后5个小时才出现,所以我没有看到它。关于“Web Cursor”,OP问到了这个问题,如果要按CSS方式设置光标,由于这个错误,某些光标无法显示,因此需要按照我展示的方式进行设置,因此我提到了它。 - Asons
@BradTurek -- 我更新了我的答案,澄清了一些内容,希望现在它已经足够好,让你撤回你的负评。 - Asons

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接