2016-12-14 2 views
2

Quelle est la meilleure pratique avec le nouveau GUI Builder, pour naviguer simplement de "formulaire A" à un autre " forme B "en cliquant sur un bouton dans" forme A ", avec l'utilisation des événements d'action?Codename one - Naviguez du formulaire A au formulaire B avec des événements d'action et un nouveau générateur GUI - et revenez de B à A

Si je crée le formulaire B dans le formulaire A comme celui-ci

public void oncreateAccountActionEvent(com.codename1.ui.events.ActionEvent ev) { 
     new FormB().show(); 
    } 

Je ne suis évidemment pas en mesure de modifier le formulaire B à l'intérieur de la classe principale (démarrage, arrêt, détruire les méthodes) avant que je ne new FormB().show(). Dans ce cas, new FormA().show(); est situé dans la méthode de démarrage de la classe principale.

Je veux être capable de spécifier par exemple. un bouton de retour au formulaire B pour retourner au formulaire A, mais je veux l'ajouter à l'intérieur de la méthode de démarrage de la classe principale.

Merci!

Edit:

J'ai la classe principale (avec démarrage(), stop(), détruire() - méthodes), dans cette classe, je fais new FormA().show().

Mais à l'intérieur de la classe de FormA j'ai le oncreateAccountActionEvent -method (et le bouton) qui montre FormB par new FormB().show().

Cependant, je veux être en mesure de préciser formB.setBackCommand() (dans la barre d'outils FormB dans la principale classe

donc dire que je veux spécifier les deux formes dans la classe principale avec new FormA/B() -. Puis modifier les formes comme ajouter des boutons à la barre d'outils - puis dire à FormA que FormB doit être utilisé dans la méthode d'événement d'action

Répondre

0

Je suis venu à une solution évidente à mon problème en remplaçant simplement le oncreateAccountActionEvent -method dans la Main-classe et toujours être en mesure de créer et de modifier FormB avant:

Form formB= new FormB(); 
// Modifying formB 
formB.setBackCommand(backCommand); 
... 

//Create formA and show the modified formB on button click 
FormA formA= new FormA() { 
    @Override 
    public void oncreateAccountActionEvent(ActionEvent ev) { 
     //Navigate to FormB 
     formB.show(); 
    }; 
}; 

Et pour naviguer de retour de FormB à Forma J'ai trouvé cette solution, de conserver une référence de la forme précédente en mettant en œuvre la show() -method de la classe de FormB:

private Form previous; 
... 

public void show() { 
     previous = Display.getInstance().getCurrent(); 
     super.show(); 
} 
... 
//go to the form before 
public void goBack(){ 
     previous.showBack(); 
} 

Peut-être que cela aide quelqu'un d'autre, aussi.

3

Utilisez la méthode showBack() pour revenir à FormA à partir de FormB comme indiqué dans le code ci-dessous. aux instances de formulaire précédente/suivante

FormA formA = new FormA(); 
FormB formB = new FormB(); 

public void oncreateAccountActionEvent(com.codename1.ui.events.ActionEvent ev) { 
    formB.show(); 
} 

public void showFormA(){ 
    formA.showBack(); 
} 
+0

A fait quelques petites améliorations à la réponse et a corrigé la faute de frappe 'formB()' –

+0

Merci pour la réponse, mais elle ne répond pas complètement à ma question - ou comment je le pensais. J'ai mis à jour ma réponse pour être plus précis. – socona

+1

Merci de donner l'indice pour garder une référence à l'instance de formulaire précédente! – socona