Comment connecter FX contrôleur principal de l'application
J'ai une application principale de la classe et un fxmlController classe mais je suis empêtré dans la connexion/l'organisation(confus comment on les appelle et comment je dois organiser pour faire l'interface graphique connectés logique) logique d'entreprise et de l'interface graphique. Quelqu'un peut s'il vous plaît dites de l'ordre dans lequel les fonctions suivantes sont appelés ou n'importe qui peut aider comment je dois les appeler?
Classe principale:
public void Main() //constructor
public static void main() //our main
public void start() //I don't know what it is, what purpose it has
//and where should be called
//Note: In main function there is a call as following
fxmlController classe:
public void initialize() //I don't know what it is and what purpose it has
public fxmlController() //which function should be called here....
NOTE: je sais à propos de FXMLLoader();
il vous plaît quelqu'un expliquer
OriginalL'auteur khan | 2015-11-23
Vous devez vous connecter pour publier un commentaire.
Je pense à un fichier FXML son correspondant au contrôleur comme une paire de gérer l'interface utilisateur. En plus d'applications que vous pourriez avoir plusieurs de ces FXML-contrôleur de paires qui composent les différentes parties de l'interface utilisateur. Au sein de chaque paire, le FXML fichier définit la mise en page de l'INTERFACE utilisateur, et le contrôleur définit la logique (c'est à dire généralement des processus de saisie de l'utilisateur, etc).
Alors que vous avez dit que vous "savez à propos de
FXMLLoader
", si vous comprendre que vous auriez fait comprendre certaines des autres choses que vous m'avez demandé, donc:L'interface utilisateur définie par un fichier FXML et de son contrôleur est chargé en mémoire par un
FXMLLoader
. Dans la configuration la plus simple, le contrôleur est défini par unfx:controller
attribut dans l'élément racine du fichier FXML. Lorsque leload()
méthode est appelée sur leFXMLLoader
, c':fx:controller
attribut, en appelant son constructeur sans argument@FXML
annotée des champs dans le contrôleur pour les éléments définis avec correspondancefx:id
attributsinitialize()
méthode sur le contrôleur, s'il y en a un.Avis l'ordre de ces événements: le constructeur est appelé avant la
@FXML
annotée champs sont injectés, mais leinitialize()
méthode est appelée après. Cela signifie que vous pouvez accéder (et configurer) et@FXML
annotée champs dans lainitialize()
méthode, mais pas dans le constructeur. Il est assez fréquent (au moins dans des applications simples) de ne pas définir de tout constructeur dans les classes de contrôleur et d'utiliser la valeur par défaut.Vous pouvez avoir autant de FXML/contrôleur de paires dans votre application que vous avez besoin/envie. Chaque fichier FXML devrait avoir son propre contrôleur de classe. Vous pouvez charger un fichier FXML autant de fois que vous avez besoin si vous souhaitez que plusieurs instances de l'INTERFACE utilisateur, il définit: chaque fois que le
FXMLLoader
permettra de créer une nouvelle instance du contrôleur pour vous qui est associé à l'élément d'INTERFACE utilisateur que vous avez chargé.La
Application
sous-classe (vous l'avez appeléMain
) représente l'ensemble de l'application. Vous devriez avoir qu'une seule classe par application et une seule instance de ce qui est créé pour vous par le FX toolkit.Lorsque vous démarrez un FX application (que je vais décrire ci-dessous), le FX toolkit est commencé. Alors une instance de votre
Application
sous-classe est créée, et soninit()
méthode est appelée (si vous ne définissez pas l'un, l'implémentation par défaut ne fait rien). Le FX Application Thread est démarré puis et laApplication
sous-classe de l'instancestart()
méthode est appelée sur ce thread.Votre
start()
méthode assez minimes de travail. En général, il vous permettra de charger votre "main" fxml fichier, placez le résultant de l'INTERFACE utilisateur dans une scène, mis en scène dans la scène, et de montrer la scène. La logique sera traitée par le contrôleur pour le fichier FXML, non pas par leApplication
sous-classe.Dans des applications plus avancées, vous pouvez commencer certains services d'arrière-plan et/ou créer des modèles de données dans votre
init()
méthode, et de les connecter avec le contrôleur dans lestart()
méthode, mais les idées ci-dessus sont les bases.Le réel processus de démarrage peut arriver dans un couple des manières. Si vous utilisez le standard d'Oracle JRE, puis le lancement d'une
Application
sous-classe avec(où
Main extends Application
) fera en sorte que le processus ci-dessus pour arriver; en d'autres termes, le FX toolkit est démarré, une instance deMain
est créé, soninit()
méthode est appelée, et c'eststart()
méthode est appelée sur le FX Application Thread.D'autres milieux (en particulier Ide) ne sont pas au courant de Charge le processus de démarrage, et s'attendre à la classe en cours d'exécution pour avoir un
public static void main(String[] args)
méthode, comme toute application Java de la classe. À l'appui de ces environnements, il est courant que votreApplication
sous-classe pour définir unmain(...)
méthode qui appelle tout simplementlaunch(...)
(une méthode statique hérité deApplication
). Lelaunch
méthode des forces FX trousse d'outils pour démarrer, etc. Il ne peut être appelé une fois en cours de vie de l'application.Alors maintenant, vous avez quelque chose comme:
Alors que vous auriez mainUI.fxml:
et le contrôleur
parfait explication. Je suis en train de faire une sorte de jeu où de simples figures géométriques sont dessinés sur la Toile et se déplaçant selon un algorithme. Pourriez-vous me dire si je devrais écrire ce morceau de code (dessin sur la toile et le déplacement de la logique) dans le init() de Principal ou dans la classe du Contrôleur? Grâce à vous!
Dessin sur toile, à la Vue de classe, en fonction des paramètres reçus de contrôleur de classe qui gère les événements de l'utilisateur. Le passage de la logique affecte l'état des données de sorte qu'il devrait être dans le Modèle les méthodes de la classe.
Avez-vous l'intention de poster ce commentaire sur un autre post? Il semble ne rien avoir à faire avec cette question ou d'une réponse: il n'y a pas de toile ici, et l'OP n'est pas de demander à propos de MVC (ou des modèles similaires) ou de la séparation entre le modèle et la vue, mais sur JavaFX du cycle de vie des méthodes.
Il n'a pas trait à l'OP question dont vous avez géré, mais je lui ai dit de toute façon. Désolé si c'est pas casher pour ce faire.
OriginalL'auteur James_D
Le contrôleur est relié à vous fxml fichier ou lorsque vous appelez la vue principale pour la première fois.
De sorte que vous pouvez utiliser le
fx:controller
attribut dans le xml ou leFXMLLoader#setController()
méthode de votre lanceur.OriginalL'auteur antoniodvr