IntelliJ,是否可以像在 NetBeans 中那样“制作控制器”?编辑以回答评论中的后续问题

有IntelliJ和NetBeans经验的人都知道,在右键单击相应的FXML文件时,IntelliJ是否具有与NetBeans“Make controller”类似的功能?

我认为这非常重要,因为它会更新,如果我添加了新的东西(例如FXID),如果我删除了它等等 - 并且还将其本身放在正确的位置。

我知道,在 Scene Builder 中,您可以转到“View -> Show Sample Controller Skeleton”,但这还不够自动化,尤其是从 Jetbrains IDE 中自动化程度不够。

这也意味着下面的链接不是一个答案:如何在intellij思想中做netbeans的“make controller”。

[Menu in Netbeans, showing the "Make controller" feature]

Menu in IntelliJ, showing nothing about controllers


答案 1

IDEA不使用操作来创建控制器,而是使用意图(通过 + 或 )激活。它的理念是在编辑FXML文件时保持控制器同步,而不是重新创建它以进行更改来更新它。AltEnter

例如,当您创建 FXML 文件时,IDEA 会提供创建控制器的功能:enter image description here

首先,我根据需要命名它,然后使用Intenty创建相应的类:

enter image description here

然后,当我向FXML添加内容时,IDEA提供在控制器中创建相应的项目:

enter image description here

与 :fx:id

enter image description here

如果我使用重命名重构来更改fx:id

enter image description here

它将控制器中的相应字段名称重命名为匹配。因此,它不是编辑它,然后重新创建控制器来捕获名称更改,它只是使它们保持同步。但同样,关键是使用重命名重构,而不仅仅是“手动”编辑.fx:id

编辑以回答评论中的后续问题

首先是免责声明...我只涉足JavaFX来编写简单的对话框作为命令行脚本的前端。因此,我绝不是专家,可能不知道IDEA中与JavaFX相关的功能。但是我已经使用IDEA14年了,通常知道在功能和“我如何做”问题方面要寻找什么。

如果您对此有所了解,您能否阐明在Scene Builder中使用这种东西?

每当我使用像Scene Builder这样的所见即所得编辑器时,我仍然会关注并清理它生成的代码。在这方面,我仍然有点老派。我相信IntelliJ IDEA坚持这一理念。

我发现很难相信IDEA没有办法在场景生成器中进行“大规模自动更新”编辑

我可以告诉你,作为一个IDE,IDEA在威世智或批量代码生成方面并不大。相反,它本质上更像是“外科手术”。它的“按意图编码”的理念是输入/编辑你的意图,然后使用意图/快速修复来实现该意图。因此,它所做的任何代码生成都是小而集中的。但。。。在某些情况下,您可以通过打开意图侧边菜单(使用向右箭头键)并选择“修复文件中的所有'问题名称'问题”来要求它同时将意图应用于多个项目。同样,鉴于我对JavaFx工作的经验有限,我可能没有意识到一些事情。但是我没有看到这样的事情,也没有在帮助页面中看到任何东西。

<soapbox> 当我在2003年第一次开始使用IDEA时,我也想知道我的旧IDE提供的所有向导和批量代码生成功能都在哪里。(我以前使用过 Forte for Java,NetBeans 的前身。起初我很想念他们。然后我开始对一切使用意图和重构。几个月后,我没有错过巫师。又过了几个月,我开始憎恨其他IDE中的巫师。从长远来看,使用意图和重构时,我的工作效率要高得多。我注意到我不再花很多时间来处理编译问题和错误,就像我使用向导时所做的那样。</肥皂盒>

如果我在场景生成器中将fx:id分配给许多按钮等,我是否必须手动进入fxml文件的代码视图,找到所有fx:id,并为每个按钮alt + enter将它们放入控制器?

不幸的是,对于缺少ID的“创建字段”意图,没有可用的批处理模式。因此,您不能使用“全部修复”选项。关于为什么不这样做,我有根据的猜测是,在创建字段时,您有机会为其选择类型。例如,对于 for a 标签,我可能希望将字段键入为 、 、 等。在大多数情况下,您可能会将其键入为FXML中的实际类型。因此,您可能希望打开一个功能请求,要求为“创建字段”意图提供批处理模式,该目的将字段默认为FXML中使用的类型。但是,如果您习惯于使用导航到下一个错误,然后使用+(或)打开快速修复,您会发现可以非常快速地添加缺少的字段。fx:idLabelLabeledControlF2AltEnter

如果我删除了一些fx:id,那么我必须记住它们是哪些,让他们在控制器中手动删除它们?

同样,不要只是“手动”删除 ,请使用 IDEA 重构。删除(或任何内容)时,请使用“安全删除”重构。将光标放在ID上(在FXML文件或控制器中),键入+(或)以启动“安全删除”。fx:idfx:idsAltDelete

enter image description here

如果没有用法,则删除该字段。否则,您会收到警告:

enter image description here

单击“查看用法”按钮。“查找”工具栏将打开,显示用法。

enter image description here

更新代码以删除其用法。使用“重新运行安全删除”按钮来监视您的进度。完成所有用法后,点击“执行重构”按钮以删除用法。虽然这似乎比某种重新生成控制器选项更复杂,但我的问题是这样的功能如何处理控制器内方法中该字段的使用?它会不会重新创建字段,在我的控制器中留下编译错误吗?它将如何“重新生成”我对控制器所做的所有自定义?

安全删除还可以使您的代码没有错误。如果我每次去删除一个我绝对知道没有在任何地方使用的东西时,我都有一美元,只是为了安全删除重构,弹出一个关于它被使用的地方的警告,我完全忘记了。


答案 2

如果您使用Javaru的解决方案,那么创建的字段将是公共的,并且没有@FXML注释。

要将其更改为:文件|设置|编辑|代码样式|爪哇|代码生成|默认可见性 - 选择“升级”或“专用”,然后选中底部的“使用外部注释”。

第二种解决方案:在场景生成器中打开fxml文件,在窗口左下角的控制器部分中设置控制器类。转到:查看|显示示例控制器框架并复制控制器类代码。

这是我的第一篇文章,希望我有所帮助。:)


推荐