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

Posted

技术标签:

【中文标题】IntelliJ,是不是可以像在 NetBeans 中一样“制作控制器”?【英文标题】:IntelliJ, is it possible to "Make controller" as in NetBeans?IntelliJ,是否可以像在 NetBeans 中一样“制作控制器”? 【发布时间】:2018-04-23 19:31:12 【问题描述】:

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

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

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

这也意味着以下链接不是答案: how to do netbeans'"make controller" in intellij idea

[]

【问题讨论】:

【参考方案1】:

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

例如,当您创建 FXML 文件时,IDEA 会提供创建控制器:

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

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

fx:id类似:

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

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

编辑以回答 cmets 中的后续问题

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

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

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

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

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

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

如果我在 Scene Builder 中将 fx:id 分配给很多按钮等,那么我是否必须手动进入 fxml 文件的代码视图,找到所有 fx:id 并为它们中的每一个 alt+ enter 让它们进入控制器?

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

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

同样,不要仅仅“手动”删除 fx:id,而是使用 IDEA 重构。删除fx:ids(或任何东西)时,使用“安全删除”重构。将光标放在 id 上(在 FXML 文件或控制器中),键入 Alt+Delete(或 ⌦) 启动“安全删除”。

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

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

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

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

【讨论】:

好的,我明白了,谢谢您的回复!我看到我可以进入 FXML 文件并手动找到写在代码中的 FXID,并让它自动创建它们。但是我经常使用 Scene Builder,这意味着我几乎从不编辑 FXML 代码本身,这意味着我不会手动编写 FXID = 无意操作。如果您对此有所了解,能否对在 Scene Builder 中使用这种东西有所了解?我很难相信 IDEA 无法在 Scene Builder 中进行“大规模自动更新”编辑 抱歉垃圾邮件.. 但只是为了澄清。如果我在 Scene Builder 中将 fx:id 分配给很多按钮等,那么我是否必须手动进入 fxml 文件的代码视图,找到所有 fx:id 并为它们中的每一个 alt+enter 获取他们进入控制器?如果我也删除了一些 fx:id,那么我必须记住它们是哪些,然后在控制器中手动删除它们? @ThomasBear - 我已经通过编辑答案回答了您的一些后续问题。【参考方案2】:

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

要更改它,请转到: 文件 |设置 |编辑 |代码风格 |爪哇 |代码生成 |默认可见性 - 选择升级或私人,并在底部选中“使用外部注释”。

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

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

【讨论】:

【参考方案3】:

我看不到创建方法或创建字段 我看到了

【讨论】:

以上是关于IntelliJ,是不是可以像在 NetBeans 中一样“制作控制器”?的主要内容,如果未能解决你的问题,请参考以下文章

像在 NetBeans 中一样在 Vim 中突出显示光标下的变量

像在eclipse中一样在intellij想法中关闭未使用的模块

我如何在 Intellij Idea 中找到构建变体,就像在 Android Studio 中一样?

如何像在 Eclipse 中一样在 IntelliJ 中创建可运行的 JAR

如何像在 Eclipse 中一样在 IntelliJ 中创建可运行的 JAR

在 IntelliJ IDEA 中更改 Ctrl+Shift+Left/Right 的行为,就像在 Eclipse 中一样