Utilisation des variables d'une frame dans une autre frame dans Jbuilder

pseudo85 Messages postés 64 Date d'inscription mardi 7 février 2006 Statut Membre Dernière intervention 17 juillet 2009 - 11 janv. 2007 à 10:28
pseudo85 Messages postés 64 Date d'inscription mardi 7 février 2006 Statut Membre Dernière intervention 17 juillet 2009 - 23 janv. 2007 à 07:25
Bonjour,
je voudrais savoir comment utiliser une variable d'une frame dans une autre frame dans Jbuilder. Merci pour votre aide.

8 réponses

Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
11 janv. 2007 à 19:42
Salut,

tu peux faire comme l'esemple ci-dessous (pour l'exemple il y a mieux avec héritage d'une classe vers l'autre mais bon vu le niveau de la question prefere pas brusquer (ce message s'addresse aux initiés)) :

la classe Main.java :

public class Main {

    public static void main(String[] args) {
        Frame2 f2 = new Frame2();
        Frame1 f1 = new Frame1(f2);
        f1.setVisible(true);
        f2.setVisible(true);
    }
}

la classe Frame1.java :

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Frame1 extends JFrame implements ActionListener{
    private static final long    serialVersionUID    = -6423377463807408292L;
    private Frame2                f2                    = null;
    private JButton                btRandomString        = null;
   
    public Frame1(Frame2 f2){
        this.f2 = f2;
        btRandomString = new JButton();
        btRandomString.setText("Random string");
        btRandomString.addActionListener(this);
        JPanel p = new JPanel();
        p.add(btRandomString);
        setContentPane(p);
        //truc de base
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        pack();
        setLocationRelativeTo(null);
    }

    public void actionPerformed(ActionEvent e) {
        if (e.getSource().equals(btRandomString))
            f2.setStr("" + new Random().nextInt());
    }
}

la classe Frame2.java :

import javax.swing.JFrame;
import javax.swing.JLabel;

public class Frame2 extends JFrame{
    private static final long    serialVersionUID    = -7679386738342918692L;
    private JLabel                lbl                    = null;
   
    public Frame2(){
        setContentPane(lbl = new JLabel());
        //truc de base
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(300, 300);
        setLocationRelativeTo(null);
    }
   
    public void setStr(String str){
        lbl.setText(str);
    }
}

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
0
pseudo85 Messages postés 64 Date d'inscription mardi 7 février 2006 Statut Membre Dernière intervention 17 juillet 2009
12 janv. 2007 à 11:58
bonjour,


et si on veut par exemple changer un état d'un bouton dans une frame à partir d'une autre frame?


j'ai essayé de rendre l'état "enabled" d'un bouton "true" mais ça n'a pas marché:


voici mon code des deux frames :


la classe Frame1.java :

import java.awt.*;
import javax.swing.*;

public class Frame1 extends JFrame{
  private JPanel jPanel1 = new JPanel();
  public  JButton jButton2 = new JButton();  
  private Frame2 f2 = new Frame2();     
   public Frame1(Frame2 f2){
    try {
      jbInit();
     }
    catch(Exception e) {
      e.printStackTrace();
    }
   }
   private void jbInit() throws Exception {

   jPanel1.setLayout(null);

   this.f2= f2;
   }
  void jButton2_actionPerformed(ActionEvent e) {
    f2.jButton1.setEnabled(true);
  }
}

la classe Frame2.java :

import java.awt.*;
import javax.swing.*;

public class Frame2 extends JFrame{
  private JPanel jPanel1 = new JPanel();
  public  JButton jButton1 = new JButton();  
     
   public Frame2(){
    try {
      jbInit();
     }
    catch(Exception e) {
      e.printStackTrace();
    }
   }
   private void jbInit() throws Exception {
    jPanel1.setLayout(null);
   
   jButton1.setEnabled(false);  
   }
}
0
cs_amelA Messages postés 83 Date d'inscription jeudi 17 novembre 2005 Statut Membre Dernière intervention 23 juin 2007
14 janv. 2007 à 16:00
bonjour,
il suffisait de déclarer ton bouton comme static et faire un show de ta frame que tu viens de mettre à jour.
voici ton code corrigé et ça devrai marcher:

la classe Frame1.java :

import java.awt.*;
import javax.swing.*;

public class Frame1 extends JFrame{
  private JPanel jPanel1 = new JPanel();
 public  JButton jButton2 = new JButton(); //tu peux laisser private  
  private Frame2 f2 = new Frame2();     
   public Frame1(){ // pas la peine de mettre Frame2 f2 comm argument
    try {
      jbInit();
     }
    catch(Exception e) {
      e.printStackTrace();
    }
   }
   private void jbInit() throws Exception {

   jPanel1.setLayout(null);

   this.f2= f2; // pas la peine de mettre ça
   }
  void jButton2_actionPerformed(ActionEvent e) {
    f2.jButton1.setEnabled(true);
   f2.show();
  }
}

la classe Frame2.java :

import java.awt.*;
import javax.swing.*;

public class Frame2 extends JFrame{
  private JPanel jPanel1 = new JPanel();
 static public  JButton jButton1 = new JButton();  
     
   public Frame2(){
    try {
      jbInit();
     }
    catch(Exception e) {
      e.printStackTrace();
    }
   }
   private void jbInit() throws Exception {
    jPanel1.setLayout(null);
   
   jButton1.setEnabled(false);  
   }
}
0
cs_amelA Messages postés 83 Date d'inscription jeudi 17 novembre 2005 Statut Membre Dernière intervention 23 juin 2007
14 janv. 2007 à 16:01
cependant, il y a un problème et je sais pas comment le résoudre, c'est quand tu executes ce code, l'ancienne frame reste toujours affichée il faudra la fermer, mai le dispose ne marche pas dans ce cas.
si quelqu'un peut nous éclairer ça serait bien   
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
14 janv. 2007 à 16:58
Salu,

faut eviter le plus possible les variables en static et encore plus en plublic ... ici il n'y en a absolument pas besoin...

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
0
cs_amelA Messages postés 83 Date d'inscription jeudi 17 novembre 2005 Statut Membre Dernière intervention 23 juin 2007
18 janv. 2007 à 19:24
bonsoir,
ta solution m'interesserait bien, j'aimerai bien savoir comment tu fais pour accéder à ces variables (ou objets) sans utiliser le static public, parce que mon programme n'a marché qu'après avoir remplacé le "private" par le "static public".
et pour quoi faut il éviter l'utilisation des "static" et des "public"?
merci.
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
18 janv. 2007 à 19:50
Salut,

le static est beaucoup trop pervert comme type et public favorise trop les corruptions de variables et de bug.

pour ce qui est de l'exemple que tu as donné sans l'utilisation de variables static et public

(dans l'exemple les boutons se renvoi la balle ;) )

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;

public class Frame1 extends JFrame implements ActionListener {

    private static final long   serialVersionUID    = 7568768752199524454L;
    private JButton             jButton             = null;
    private Frame2              f2                  = null;

    public Frame1() {
        setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        setSize(300, 300);
        setLocationRelativeTo(null);
        setContentPane(getJButton());

        getFrame2().setVisible(true);
        setVisible(true);

    }

    public Frame2 getFrame2() {
        if (f2 == null)
            f2 = new Frame2(this);
        return f2;
    }

    public JButton getJButton() {
        if (jButton == null) {
            jButton = new JButton();
            jButton.setText("jButton classe Frame1");
            jButton.addActionListener(this);
        }
        return jButton;
    }

    public void actionPerformed(ActionEvent e) {
        if (e.getSource().equals(getJButton())) {
            getFrame2().getJButton().setEnabled(true);
            getJButton().setEnabled(false);
        }

    }

    public static void main(String[] args) {
        new Frame1().setVisible(true);
    }
}

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;

public class Frame2 extends JFrame implements ActionListener{
    private static final long   serialVersionUID    = -8324465475991592808L;
    private JButton             jButton             = null;
    private Frame1              f1                  = null;
   
    public Frame2(Frame1 f1) {
        this.f1 = f1;
        setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        setSize(300, 300);
        setLocation(0, 0);

        setContentPane(getJButton());
    }

    public JButton getJButton() {
        if (jButton == null) {
            jButton = new JButton();
            jButton.setText("jButton classe Frame2");
            jButton.setEnabled(false);
            jButton.addActionListener(this);
        }
        return jButton;
    }

    public void actionPerformed(ActionEvent e) {
        if(e.getSource().equals(getJButton())){
            f1.getJButton().setEnabled(true);
            getJButton().setEnabled(false);
        }
       
    }
}

Note : la méthode show() est deprecated ...
------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
0
pseudo85 Messages postés 64 Date d'inscription mardi 7 février 2006 Statut Membre Dernière intervention 17 juillet 2009
23 janv. 2007 à 07:25
bonjour,


à propos de la dernière solution, ça marche mais si la Frame2 est appelée par une autre frame dans le projet, et qu'après cela on clique sur jButton de la Frame1, il y a aucune modification dans la Frame2, sauf si on la réaffiche avec le :             getFrame2().setVisible(true), (le but est que les modifications se passe sur la même Frame2 affichée au départ).
merci 


 
0
Rejoignez-nous