IntelliJ,是否可以像在 NetBeans 中那样 "Make controller"?

IntelliJ, is it possible to "Make controller" as in NetBeans?

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

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

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

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

[]

A 没有创建控制器,而是使用 intentions(通过 Alt+Enter)。它的理念是在您编辑 FXML 文件时保持控制器同步,而不是重新创建它以使用更改更新它。

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

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

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

fx:id 类似:

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

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

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

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

Can you shed some light on using this kind of stuff with Scene Builder, if you know something about it?

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

I find it really hard to believe IDEA has no way of "mass automatic updating" edits made in Scene Builder

我可以告诉你 IDE,IDEA 在 Wizards 或大量代码生成方面并不重要。相反,它在本质上更 "surgical"。它的 "code by intentions" 理念是 enter/edit 您的意图,然后使用 intention/quick-fix 来实现该意图。因此,它所做的任何代码生成都是小而集中的。 但是... 在某些情况下,您可以通过打开意向侧菜单(使用右箭头 键)和 selecting "Fix All 'issue name' problems in file"。同样,鉴于我在 JavaFx 工作方面的经验有限,我可能没有意识到某些事情。但是我没有看到任何这样的东西,而且我在帮助页面中也没有看到任何东西。

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

If I assign fx:id's to a lot of buttons and such in Scene Builder, do I then have to manually go into the code view of the fxml file, find all of the fx:id's and for each of them alt+enter to get them into the controller?

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

if I deleted some fx:id's also, then I would have to remember which ones they were, to them manually delete them in the controller?

同样,不只是 "manually" 删除 fx:id,而是使用 IDEA 重构。删除 fx:ids (或任何东西)时使用 "Safe Delete" 重构。将光标放在 id 上(在 FXML 文件或控制器中),键入 Alt+Delete(或 ) 启动 "Safe Delete".

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

单击 "View Usages" 按钮。 "Find" 工具栏将打开,显示用法。

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

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

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

要更改它,请转到: 文件 |设置 |编辑|代码风格 | Java |代码生成 |默认可见性 - 选择升级或私密,并选中底部的 "use external annotations"。

第二种解决方案:在场景生成器中打开 fxml 文件,在 window 左下角的控制器部分设置控制器 class。前往:查看 |显示示例控制器框架和复制控制器 class 代码。

这是我的第一个 post,希望对您有所帮助。 :)

我看不到创建方法或创建字段
我看到这个