Architecture Java Swing pour feuilleter les vues basées sur JPane


J'ai fait quelques applications simples basées sur swing avec une mise en page statique, mais maintenant j'ai rencontré un problème en essayant de créer une application contenant plusieurs vues qui sont modifiées en appuyant sur le bouton de navigation approprié.

Vous pouvez comparer l'idée à un site Web afin que chaque vue ait des boutons pour accéder à certaines autres vues, mais cela fonctionnerait dans un seul JFrame.

J'ai trouvé que peut-être CardLayout (Cardlayout example ) pourrait être la solution appropriée pour cela type de structure, mais je suis incapable de trouver un moyen de changer les vues à partir des boutons qui sont à l'intérieur des JPanes que j'ai implémentés dans leurs classes séparées,

Bien sûr, une façon serait d'instancier tout dans la classe parent comme dans le petit exemple de tutoriel java, mais ce n'est pas tout à fait propre ni modulaire pour plusieurs vues, n'est-ce pas.

Comment cela peut-il être implémenté pour que je puisse accéder à la méthode de commutation de vue?

Author: imhotep, 2010-05-05

1 answers

Oui, CardLayout est spécifiquement approprié lorsque vous avez différentes vues que vous souhaitez basculer entre les deux. Évidemment, comme le dit @ medoal, JTabbedPane pourrait également être utilisé. Quoi qu'il en soit, étant donné que vous souhaitez utiliser un CardLayout avec des boutons à l'intérieur des panneaux vous permettant de changer le panneau visible, ce que vous feriez pourrait être:

  1. Créez vos panneaux et permettez-leur d'avoir un objet implémentant une interface donnée enregistré. Cette interface contiendrait une méthode couvrant le CardLayout#show(Conteneur, chaîne) méthode. Eh bien, à titre d'exemple, étant donné que vos panneaux ont tous leurs noms définis et que chacun de ces noms est différent, vous pouvez écrire quelque chose comme

    Interface publique PanelToggler { public void toggleTo(Nom de chaîne); }

  2. Dans la classe contenant le CardLayout, vous implémenteriez le PanelToggler avec quelque chose comme

    Public void toggleTo(Nom de chaîne) { ((CardLayout) getLayout ()).show(cet, nom); }

De cette façon, dans chaque panneau, chaque bouton basculant l'élément vu de CardLayout devrait simplement appeler toogleTo avec l'argument correct.

 2
Author: Riduidel, 2010-05-05 11:46:06