IntelliJ,是否可以像NetBeans一样“制作控制器”?

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

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

我知道你,在Scene Builder中,可以进入“View – > Show Sample Controller Skeleton” ,但这不够自动化,尤其是Jetbrains IDE。

这也意味着以下链接不是答案: 如何在intellij想法中做netbeans的“make controller”

[ Netbeans中的菜单,显示“Make controller”功能 ]

IntelliJ中的菜单,不显示控制器

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

例如,当您创建FXML文件时,IDEA提供创建控制器: 在此处输入图像描述

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

在此处输入图像描述

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

在此处输入图像描述

fx:id类似:

在此处输入图像描述

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

在此处输入图像描述

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

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

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

如果你对它有所了解,你能否说明在Scene Builder中使用这种东西?

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

我发现很难相信IDEA无法在Scene Builder中进行“大规模自动更新”编辑

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

当我在2003年第一次开始使用IDEA时,我也想知道我的旧IDE提供的所有向导和批量代码生成function的位置。 (我之前使用的是Forte for Java,它是NetBeans的前身。)起初我很想念它们。 然后我开始使用意图和重构一切。 几个月后,我没有错过巫师。 再过几个月,我开始讨厌其他IDE中的向导。 从长远来看,我使用意图和重构的效率要高得多。 我注意到我不再花费大量时间处理编译问题和我在使用向导时所做的错误。

如果我在场景生成器中将fx:id分配给很多按钮,那么我是否必须手动进入fxml文件的代码视图,找到所有的fx:id并为每个按钮添加alt +输入以获取他们进入控制器?

不幸的是,“创建字段”意图丢失ID“没有可用的批处理模式。所以你不能使用”全部修复“选项。我的教育猜测为什么不是在创建字段时你有机会选择它的类型。例如,对于标签的fx:id ,我可能想要将字段键入LabelLabeledControl等。在大多数情况下,您可能会将其键入为实际类型在您的FXML中。因此您可能想要打开一个function请求,要求批处理模式可用于“创建字段”意图,该意图默认字段在FXML中使用的类型。但是,如果您习惯使用F2导航到下一个错误,然后使用Alt + Enter (或⌥⌥ )打开快速修复程序,您会发现可以非常快速地添加缺少的字段。

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

同样,不要只是“手动”删除fx:id ,而是使用IDEA重构。 删除fx:ids (或任何内容)时,请使用“安全删除”重构。 将光标放在id上(在FXML文件或Controller中),键入Alt + Delete (或⌘⌦ )以启动“安全删除”。

在此处输入图像描述

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

在此处输入图像描述

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

在此处输入图像描述

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

安全删除还可以使您的代码无错误。 如果我每次去删除一个东西,我绝对知道并没有被用于安全删除重构,以便弹出关于它被使用的地方的警告,我完全忘了。

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

要更改它,请转到:文件| 设置| 编辑| 代码风格| Java | 代码生成| 默认可见性 – 选择上报或私有,然后选中底部的“使用外部注释”。

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

这是我的第一篇文章,希望我能帮到你。 🙂