web-dev-qa-db-fra.com

IntelliJ, est-il possible de "Make controller" comme dans NetBeans?

Est-ce que quelqu'un avec une expérience IntelliJ et NetBeans sait, si IntelliJ a une fonctionnalité similaire à celle de NetBeans "Make controller" lors d'un clic droit sur le fichier FXML correspondant?

Je pense que c'est assez important car il se met à jour, si j'ai ajouté quelque chose de nouveau (un FXID par exemple), et si je l'ai supprimé et ainsi de suite - et le place également au bon endroit par lui-même.

Je sais que dans Scene Builder, vous pouvez aller à "Affichage -> Afficher l'exemple de squelette de contrôleur" , mais ce n'est tout simplement pas assez d'automatisation, surtout pas à partir de un IDE Jetbrains.

Cela signifie également que le lien suivant n'est pas une réponse: comment faire le "make controller" de netbeans dans intellij idea

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

Menu in IntelliJ, showing nothing about controllers

11
ThomasBear

Plutôt que d'avoir une action pour créer le contrôleur, IDEA utilise intentions (activer via Alt+Enter ou ). Et sa philosophie serait de garder le contrôleur synchronisé lorsque vous éditez le fichier FXML plutôt que de le recréer pour le mettre à jour avec les modifications.

Par exemple, lorsque vous créez un fichier FXML, IDEA propose de créer le contrôleur: enter image description here

D'abord, je le nomme comme vous le souhaitez, puis j'utilise une intention pour créer la classe correspondante:

enter image description here

Alors que j'ajoute des choses au FXML, IDEA propose de créer les éléments correspondants dans le contrôleur:

enter image description here

De même avec un fx:id:

enter image description here

Et si j'utilise le refactorisateur renommé pour changer le fx:id

enter image description here

il renomme le nom de champ correspondant dans le contrôleur pour correspondre. Ainsi, au lieu de le modifier puis de recréer le contrôleur pour capturer le changement de nom, il les maintient simplement synchronisés. Mais encore une fois, la clé est d'utiliser le refactoring renommer et pas seulement "manuellement" éditer le fx:id.

Modifier pour répondre aux questions de suivi dans les commentaires

Tout d'abord une clause de non-responsabilité ... Je ne fais que taper dans JavaFX pour écrire des dialogues simples en tant que frontaux pour les scripts de ligne de commande. Je ne suis donc en aucun cas un expert et je ne suis peut-être pas au courant d'une fonctionnalité liée à JavaFX dans IDEA. Mais j'utilise IDEA depuis 14 ans et je sais généralement ce qu'il faut rechercher en termes de fonctionnalités et de questions "comment faire".

Pouvez-vous nous éclairer sur l'utilisation de ce genre de choses avec Scene Builder, si vous en savez quelque chose?

Chaque fois que j'utilise un éditeur WYSIYWG comme Scene Builder, je garde toujours un œil sur et nettoie le code qu'il génère. Je suis toujours un peu vieille école de cette façon. Et je crois que IntelliJ IDEA adhère à cette philosophie.

J'ai du mal à croire IDEA n'a aucun moyen de procéder à des "mises à jour automatiques de masse" dans Scene Builder

Je peux vous dire en tant qu'IDE, IDEA n'est pas grand pour les assistants ou la génération de code de masse. Au lieu de cela, il est de nature plus "chirurgicale". C'est la philosophie du "code par intentions" est d'entrer/éditer votre l'intention, puis utiliser une intention/correction rapide pour implémenter cette intention. Ainsi, toute génération de code qu'elle fait est petite et ciblée. Mais ... dans dans certains cas, vous pouvez lui demander d'appliquer simultanément une intention à plusieurs éléments en ouvrant le menu latéral des intentions (à l'aide de la flèche droite  ) et en sélectionnant "Tout corriger" nom du problème "problèmes dans le fichier". Encore une fois, étant donné mon expérience limitée du travail JavaFx, je ne suis peut-être pas au courant de quelque chose. Mais je ne vois rien là où une telle chose se trouverait et je ne vois rien dans les pages d'aide.

<soapbox> Quand j'ai commencé à utiliser IDEA en 2003, je me suis aussi demandé où se trouvaient tous les assistants et fonctionnalités de génération de code de masse que mes anciens IDE fournis étaient. (I précédemment utilisé Forte pour Java, le prédécesseur de NetBeans.) Au début, je les ai manqués. Ensuite, j'ai commencé à utiliser des intentions et des refactorisations pour tout. Après quelques mois, je n'ai pas manqué les assistants. Après quelques mois de plus, je suis venu pour détester les assistants dans d'autres IDE. À long terme, j'étais beaucoup plus productif en utilisant les intentions et les refactorisations. Et j'ai remarqué que je ne passais plus beaucoup de temps à traiter les problèmes de compilation et les bogues que je faisais lorsque j'utilisais les assistants. </boîte à savon>

Si j'attribue des fx: id à de nombreux boutons et autres dans Scene Builder, dois-je alors aller manuellement dans la vue code du fichier fxml, trouver tous les fx: id et pour chacun d'eux alt + enter pour obtenir les dans le contrôleur?

Malheureusement pour l'intention de "créer un champ" pour les identifiants manquants ", il n'y a pas de mode de traitement par lots disponible. Vous ne pouvez donc pas utiliser l'option" Tout réparer ". Ma supposition éclairée explique pourquoi, lors de la création du champ, vous avez la possibilité pour sélectionner le type correspondant. Par exemple, avec le fx:id pour une étiquette, je peux vouloir taper le champ comme Label, Labeled, Control, etc. Certes, dans la plupart des cas, vous êtes susceptible de le taper comme réel tapez-le dans votre FXML. Ainsi, vous souhaiterez peut-être ouvrir une demande de fonctionnalité demandant qu'un mode de traitement par lots soit mis à disposition pour l'intention "Créer un champ" qui utilise par défaut le champ à taper utilisé dans FXML. Néanmoins, si vous avez l'habitude d'utiliser F2 pour naviguer jusqu'à l'erreur suivante, puis en utilisant Alt+Enter (ou ) pour ouvrir la solution rapide, vous constaterez que vous pouvez ajouter les champs manquants très rapidement.

si je supprimais aussi certains fx: id, alors je devrais me souvenir de ceux qu'ils étaient, les supprimer manuellement dans le contrôleur?

Encore une fois, au lieu de supprimer simplement "manuellement" un fx:id, utilisez un IDEA refactoring. Lors de la suppression de fx:ids (ou autre) utilisez le refactoring "Suppression sécurisée". Avec votre curseur sur l'id (dans le fichier FXML ou le contrôleur), tapez Alt+Delete (ou ) pour lancer "Suppression sécurisée".

enter image description here

S'il n'y a aucune utilisation, le champ est supprimé. Sinon, vous obtenez un avertissement:

enter image description here

Cliquez sur le bouton "Afficher les utilisations". La barre d'outils "Rechercher" s'ouvrira pour montrer les utilisations.

enter image description here

Mettez à jour votre code pour supprimer leurs utilisations. Utilisez le bouton "Rerun Safe Delete" pour suivre votre progression. Une fois toutes les utilisations terminées, appuyez sur le bouton "Refactoriser" pour supprimer les utilisations. Bien que cela puisse sembler plus compliqué qu'une sorte de régénération de l'option du contrôleur, ma question serait de savoir comment une telle fonctionnalité traiterait-elle l'utilisation de ce champ dans une méthode au sein du contrôleur? Ne recréerait-il simplement pas le champ en laissant une erreur de compilation dans mon contrôleur? Comment pourrait-il "régénérer" toutes les personnalisations que j'ai apportées au contrôleur?

La suppression sécurisée conserve également votre code sans erreur. Si j'avais un dollar pour chaque fois que j'allais supprimer quelque chose que je savais absolument ne pas être utilisé n'importe où uniquement pour la refactorisation de suppression sûre pour afficher un avertissement sur l'endroit où il était utilisé que j'avais totalement oublié.

5
Javaru

Si vous utilisez la solution de Javaru, les champs créés seront publics et sans annotations @FXML.

Pour le changer, allez dans: Fichier | Paramètres | Editeur | Style de code | Java | Génération de code | Visibilité par défaut - choisissez Escalade ou Privé, et cochez "utiliser les annotations externes" en bas.

Deuxième solution: ouvrir le fichier fxml dans le générateur de scène définir la classe de contrôleur dans la section contrôleur en bas à gauche de la fenêtre. Allez à: voir | montrer l'exemple de squelette de contrôleur et copier le code de classe de contrôleur.

C'est mon premier post, j'espère avoir aidé. :)

3
Mcin

Je ne vois pas la méthode de création ou le champ de création
Je vois ça enter image description here
enter image description here

0
Sona