[RESOLU]Accéder méthode ou objet autre Frame

Accéder méthode ou objet autre Frame [RESOLU] - Java - Programmation

Marsh Posté le 19-04-2010 à 22:36:52    

Bonjour,
 
J'ai ma jFrame principale qu'on va appeler jFrame1, et j'ouvre une nouvelle jFrame ( on appele jFrame2) grâce à un bouton.
 
Ce que je me demande c'est, comment puis-je accéder à des objets graphiques tels que les labels depuis ma jFrame2?
 
Aussi, comment puis-je utiliser une procédure présente dans ma jFrame1 depuis la jFrame2?
 
merci :)


Message édité par piero53 le 20-04-2010 à 16:33:53
Reply

Marsh Posté le 19-04-2010 à 22:36:52   

Reply

Marsh Posté le 20-04-2010 à 09:43:24    

Il faut passer jFrame1 en paramètre du listener du bouton. Comme ça tu récupères la référence de jFrame1 dans jFrame2.

Reply

Marsh Posté le 20-04-2010 à 10:57:38    

c'est-à-dire, lors de l'action du bouton pour ouvrir ma jFrame2 :
 

Code :
  1. new jFrame2(jFrame1).setVisible(true);


 
Cela ne fonctionne pas... peut-être y a-il autre chose à modifier du coté de la jFrame2?

Reply

Marsh Posté le 20-04-2010 à 11:18:56    

Oui par exemple, ça peut marcher.
Il faut alors que tu prennes dans le constructeur de jFrame2, jFrame1 que tu stockes pour pouvoir le réutiliser après.

Reply

Marsh Posté le 20-04-2010 à 11:26:30    

ok mais comment stocker jFrame1 dans le constructeur de jFrame2? :)

Reply

Marsh Posté le 20-04-2010 à 11:30:59    

Grossièrement :
 

Code :
  1. A1 a1;
  2. A2(A1 a1){
  3. this.a1 = a1;
  4. }
  5. void fonction(){
  6. //fonction où tu utilises A1
  7. a1.truc();
  8. ...
  9. }

Reply

Marsh Posté le 20-04-2010 à 11:41:25    

hum j'ai du mal à savoir ou mettre quoi...

 

j'ai d'un coté l'action du bouton pour ouvrir ma jFrame2 :

 
Code :
  1. private void jBtnAjouterActionPerformed(java.awt.event.ActionEvent evt) {                                           
  2.         new jFrame2().setVisible(true);
  3.     }
 

et de l'autre coté ma jFrame2 :

 
Code :
  1. public class jFrame2 extends javax.swing.JFrame {
  2. ...
  3. public jFrame2() {
  4.    initComponents();
  5. }
  6.     public static void main(String args[]) {
  7.         java.awt.EventQueue.invokeLater(new Runnable() {
  8.             public void run() {
  9.                 new jFrame2().setVisible(true);
  10.             }
  11.         });
  12.     }
 

maintenant reste à passer la référence de la jFrame1, mais ou ?


Message édité par piero53 le 20-04-2010 à 12:32:12
Reply

Marsh Posté le 20-04-2010 à 11:47:47    

Je comprends pas trop ton code ou du moins ce que tu me montres. T'as une classe JFrame2 à toi non ? Pourquoi tu me montres jAjout ?
 
Ta méthode jBtnAjouterActionPerformed elle est dans quelle classe ?

Reply

Marsh Posté le 20-04-2010 à 12:15:53    

oups pardon, en fait jAjout correspond à jFrame2 (s'était pour simplifier l'explication).
 
Et la méthode jBtnAjouterActionPerformed est donc dans la classe de la jFrame1 forcément.

Reply

Marsh Posté le 20-04-2010 à 12:45:41    

Ok donc :

 
Code :
  1. private void jBtnAjouterActionPerformed(java.awt.event.ActionEvent evt) {                                           
  2.         new jFrame2(this).setVisible(true);
  3.     }
 


Code :
  1. public class jFrame2 extends javax.swing.JFrame {
  2. ...
  3. private jFrame1 jf1;
  4. public jFrame2(jFrame1 jf1) {
  5.    this.jf1 = jf1;
  6.    initComponents();
  7. }


Message édité par Deamon le 20-04-2010 à 12:46:32
Reply

Marsh Posté le 20-04-2010 à 12:45:41   

Reply

Marsh Posté le 20-04-2010 à 13:20:17    

ok j'ai bien mis ceci en place :)
 
j'arrive maintenant à accéder depuis la jFrame2 aux méthodes de la jFrame1 :)
 
par contre comment puis-je accéder aux objets tels que les labels ou les combobox? (je travaille avec netbeans)

Reply

Marsh Posté le 20-04-2010 à 14:02:29    

Tu peux mettre tes objets en membre de la classe par exemple pour les avoir accessible directement. Après je sais pas comment tu as créé ça.

Reply

Marsh Posté le 20-04-2010 à 15:31:46    

Ok, de toute façon à partir du moment ou je peux accéder aux méthodes de la jFrame1 c'est bon.
 
Par contre, dans la code que tu m'a donné précédemment (et que j'ai appliqué), il fonctionne.
 
Cependant, pour cette partie du code restant de la jFrame2 :
 

Code :
  1. #     public static void main(String args[]) {
  2. #         java.awt.EventQueue.invokeLater(new Runnable() {
  3. #             public void run() {
  4. #                 new jFrame2().setVisible(true);
  5. #             }
  6. #         });


 
il me met  
 

Citation :

cannot find symbol
 
constructor jFrame2


 
Cela vient du fait qu'il faut lui mettre une paramètre a jFrame(ici) ?
 
j'ai pourtant bien essayé de mettre jFrame1, jFrame2 etc mais toujours cette erreur

Reply

Marsh Posté le 20-04-2010 à 15:56:40    

Je comprends pas ton main, tu lances jFrame2 mais normalement c'est pas le 1 qui doit appeler le 2 ?

Reply

Marsh Posté le 20-04-2010 à 16:02:57    

si c'est bien le 1 qui appel le 2
 
cette partie 'main' de la jFrame2 se fait toute seule lorsque l'on créer une nouvelle jFrame avec netbeans

Reply

Marsh Posté le 20-04-2010 à 16:12:36    

Dans ce cas tu peux virer ce main si tu ne t'en sers pas.

Reply

Marsh Posté le 20-04-2010 à 16:33:05    

ok je l'ai viré et cela fonctionne :)
 
merci beaucoup :)

Reply

Marsh Posté le 05-04-2017 à 23:35:59    

Deamon a écrit :

Je comprends pas ton main, tu lances jFrame2 mais normalement c'est pas le 1 qui doit appeler le 2 ?


Bonsoir,
 
S'il vous plait pour ce meme exemple comment je vais fermer la jframe2 lors de l'action d'une bouton qui se  trouve dans jframe2 aussi
mercii

Reply

Marsh Posté le 06-04-2017 à 09:44:28    

Salut s'il vous plait  ce meme exemple comment je vais fermer la jframe2 lors de l'action d'une bouton qui se  trouve dans jframe2 aussi  
mercii d'avance

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed