web-dev-qa-db-ja.com

IntelliJ、NetBeansのように「コントローラを作成」することは可能ですか?

IntelliJとNetBeansの経験がある人なら誰でも知っていますか?対応するFXMLファイルを右クリックしたときにIntelliJにNetBeansの「コントローラーの作成」と同様の機能がある場合、

新しいもの(たとえば、FXID)を追加した場合、およびそれを削除した場合など、更新され、それ自体が正しい場所に配置されるため、更新するので非常に重要です。

シーンビルダーで「表示->サンプルコントローラーのスケルトンを表示」に移動できることはわかっていますが、これは自動化だけでは不十分で、特にJetbrains IDE。

これは、次のリンクが回答ではないことも意味します。 netbeansの「コントローラの作成」をintellijのアイデアで実行する方法

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

Menu in IntelliJ, showing nothing about controllers

11
ThomasBear

IDEA Uses intentions (activate via Alt+Enter または )。また、FXMLファイルを再作成して変更を加えて更新するのではなく、FXMLファイルを編集するときにコントローラーの同期を保つことがその理念です。

たとえば、FXMLファイルを作成すると、IDEAがコントローラーの作成を提案します。 enter image description here

最初に必要に応じて名前を付け、次にインテンションを使用して対応するクラスを作成します。

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関連機能を認識していない可能性があります。しかし、私は14年間IDEAを使用しており、通常、機能や「方法」の質問で何を探すべきかを知っています。

シーンビルダーでこの種のものを使用することについて少し知っていれば、少し説明できますか?

Scene BuilderのようなWYSIYWGエディタを使用するときはいつでも、それが生成するコードを監視してクリーンアップします。私はまだそのように少し古い学校です。そして、IntelliJ IDEAはその哲学を遵守していると思います。

IDEAには、シーンビルダーで行われた「大量自動更新」編集の方法がありません。

IDEと言えます、IDEAは、ウィザードや大量のコード生成では大きくありません。代わりに、本質的に「外科的」です。「意図によるコード」の哲学は、意図を実装し、意図/クイックフィックスを使用してその意図を実装します。そのため、コード生成は小さく集中して行われます。しかし...場合によっては、意図のサイドメニューを開いて(右矢印を使用して)、意図を複数のアイテムに同時に適用するように要求できます  キー)を押して、「ファイル内のすべての 'issue name'問題を修正する」を選択します。繰り返しますが、JavaFxの作業に関する私の限られた経験を考えると、私は何かに気付かないかもしれません。しかし、私はそのようなことは何も見ていませんし、ヘルプページにも何も見ていません。

<soapbox> 2003年にIDEAを使い始めたとき、以前のIDEが提供していたすべてのウィザードと大量のコード生成機能がどこにあるのか疑問に思いました。以前はNetBeansの前身であるForte for Javaを使用していました。)最初はそれらを見逃していました。その後、すべてに意図とリファクタリングを使用し始めました。2か月後、ウィザードを見逃しませんでした。他のIDEでウィザードを使用しないようにしました。長期的には、意図とリファクタリングを使用することで生産性が大幅に向上しました。また、ウィザードを使用したときのように、コンパイルの問題やバグの処理に多くの時間を費やしていないことに気付きました。</soapbox>

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(または何か)を削除する場合は、「安全な削除」リファクタリングを使用します。カーソルを(FXMLファイルまたはコントローラー内の)IDに入力します。 Alt+Delete (または )「安全な削除」を起動します。

enter image description here

使用法がない場合、フィールドは削除されます。そうでない場合、警告が表示されます。

enter image description here

「使用状況の表示」ボタンをクリックします。 「検索」ツールバーが開き、使用方法が表示されます。

enter image description here

コードを更新して、それらの使用法を削除します。 [安全な削除を再実行]ボタンを使用して、進捗状況を監視します。すべての使用が完了したら、[Do Refactor]ボタンをクリックして使用を削除します。これはある種のコントローラーオプションの再生成よりも複雑に思えるかもしれませんが、私の質問は、そのような機能がコントローラー内のメソッドでそのフィールドの使用をどのように処理するのでしょうか?それは私のコントローラーにコンパイルエラーを残してフィールドを再作成しないのでしょうか?コントローラに対して行ったすべてのカスタマイズを「再生成」するにはどうすればよいですか?

安全な削除により、コードにエラーが発生しなくなります。私が何かを削除しようとするたびに1ドル持っていた場合、安全な削除リファクタリングだけのためにどこでも使用されていないことが絶対にわかっていて、完全に忘れていた使用場所に関する警告がポップアップ表示されました。

5
Javaru

Javaruのソリューションを使用する場合、作成されたフィールドはパブリックになり、@ FXMLアノテーションがなくなります。

変更するには、次の場所に移動します。ファイル|設定|エディター|コードスタイル| Java |コード生成|デフォルトの可視性-[エスカレート]または[プライベート]を選択し、下部にある[外部注釈を使用]をオンにします。

2番目の解決策:シーンビルダーでfxmlファイルを開き、ウィンドウの左下のコントローラーセクションにコントローラークラスを設定します。移動:表示|サンプルのコントローラースケルトンを表示し、コントローラークラスのコードをコピーします。

これは私の最初の投稿です。 :)

3
Mcin

Createメソッドまたはcreateフィールドが表示されない
私はこれを見る - enter image description here
enter image description here

0
Sona