Generer instance vs variable static

Signaler
Messages postés
10
Date d'inscription
vendredi 25 avril 2008
Statut
Membre
Dernière intervention
30 avril 2008
-
Messages postés
10
Date d'inscription
vendredi 25 avril 2008
Statut
Membre
Dernière intervention
30 avril 2008
-
Salut


j'ai créé une application java composée de +ieurs classe.


aaaa est la classe "main"


elle lance (quand on appuie sur un bouton) un threadbbbb . Ce threadbbbb lance une autre classe cccc.


Cette classe cccc modifie des variblestatic de la classe aaaa.


J'ai implémenté une nvlle interface pour générer aaaa 3 fois .


Le probléme:


Quand j'appuie sur le bouton (classe aaaa) pour lancer bbbb, les variables static ne sont modifiées que sur la dernière aaaa générée.


SVP Aidez moi à trouver une solution pour que , quand je lance bbbb sur une aaaa, elle "bbbb" modifie sur cette aaaa et non pas sur une autre aaaa générée.





Merci

Code de la route GRATUIT

11 réponses

Messages postés
519
Date d'inscription
mercredi 21 mars 2007
Statut
Membre
Dernière intervention
19 décembre 2016
25
Salut,

Je ne comprends pas très bien.

"Ce threadbbbb lance une autre classe cccc." -> que veux-tu dire?
Tu veux dire qu'il crée une instance de cccc?

"J'ai implémenté une nvlle interface pour générer aaaa 3 fois ." -> là je ne comprends pas très bien non plus.
Implémenté dans le sens implements? interface dans le sens interface graphique ou interface java?

"Quand j'appuie sur le bouton (classe aaaa) pour lancer bbbb, les variables static ne sont modifiées que sur la dernière aaaa générée." -> idem.
Les variables static sont communes à toutes les instances d'une classe donc si elles ont changé pour la dernière aaaa, obligatoirement elles ont changé pour toutes les instances de aaaa.

Si tu veux que les variables ne soient pas changées pour toutes les instances de aaaa, enlève simplement les static.
Messages postés
10
Date d'inscription
vendredi 25 avril 2008
Statut
Membre
Dernière intervention
30 avril 2008

Si j'enlève les variables static de aaaa ,la classe bbbb ne pourra pas modifier  ces variables!!!!!!?????

Code de la route GRATUIT
Messages postés
519
Date d'inscription
mercredi 21 mars 2007
Statut
Membre
Dernière intervention
19 décembre 2016
25
Ah d'accord je comprends.

En fait tu cherchais une façon de pouvoir modifier les attributs à partir d'une autre classe et tu as trouvé le mot clé static.

Je suis malheureusement passé par là aussi, si je me rappelle bien, ce n'est évidemment pas une solution à partir du moment où tu auras plusieurs instances de la classe (c'est généralement le cas).

Solution :

Quand tu crées l'instance de BBBB en faisant probablement new BBBB (), il faut rajouter en paramètre du construteur un objet aaaa.
par exemple

public class BBBB {

    private AAAA aaaa;
    public BBBB(AAAA aaaa){
       this.aaaa = aaaa.
    }

}
ainsi, dans la classe BBBB, au lieu de faire un accès static (AAAA.variable 5) tu fais un accès standard : aaaa.variable 5
Messages postés
10
Date d'inscription
vendredi 25 avril 2008
Statut
Membre
Dernière intervention
30 avril 2008

Messages postés
10
Date d'inscription
vendredi 25 avril 2008
Statut
Membre
Dernière intervention
30 avril 2008

SALUT
J'ai essayé cette méthode mais j'ai toujours la même problème

Code de la route GRATUIT
Messages postés
10
Date d'inscription
vendredi 25 avril 2008
Statut
Membre
Dernière intervention
30 avril 2008

Voici le code d'un exemple qui ressemble aux problèmes que je rencontre dans mon application

package index;

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

public class Frame extends JFrame {
  JPanel contentPane;
  JButton jButton1 =  new JButton();
  private Frame1[] appli = new Frame1[2]; 
  //Construct the frame
  public Frame() {
    enableEvents(AWTEvent.WINDOW_EVENT_MASK);
    try {
      jbInit();
    }
    catch(Exception e) {
      e.printStackTrace();
    }
  }
  //Component initialization
  private void jbInit() throws Exception  {
    contentPane  = (JPanel) this.getContentPane();
    jButton1.setBounds(new Rectangle(137, 57, 182, 32));
    jButton1.setText("jButton1");
    jButton1.addActionListener(new Frame_jButton1_actionAdapter(this));
    contentPane.setLayout(null);
    this.setSize(new Dimension(400, 300));
    this.setTitle("index");
    contentPane.setDebugGraphicsOptions(0);
    contentPane.add(jButton1, null);
  }
  //Overridden so we can exit when window is closed
  protected void processWindowEvent(WindowEvent e) {
    super.processWindowEvent(e);
    if (e.getID() = = WindowEvent.WINDOW_CLOSING) {
      System.exit(0);
    }
  }

  void jButton1_actionPerformed(ActionEvent e) {
    for (int i = 0; i < 2; i++) {
        appli[i] = new Frame1();
          appli[i].setVisible(true);

    }

  }
}

class Frame_jButton1_actionAdapter implements java.awt.event.ActionListener {
  Frame adaptee;

  Frame_jButton1_actionAdapter(Frame adaptee) {
    this.adaptee = adaptee;
  }
  public void actionPerformed(ActionEvent e) {
    adaptee.jButton1_actionPerformed(e);
  }
}


package index;

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

public class Frame1 extends JFrame {
  JButton jButton1 = new JButton();
 static JButton jButton2 ; 

  public Frame1() {
    try {
      jbInit();
    }
    catch(Exception e) {
      e.printStackTrace();
    }
  }
  private void jbInit() throws Exception {

jButton2  = new JButton();
    jButton1.setBounds(new Rectangle(85, 51, 231, 46));
    jButton1.setText("jButton1");
    jButton1.addActionListener(new Frame1_jButton1_actionAdapter(this));
    this.getContentPane().setLayout(null);
    jButton2.setBounds(new Rectangle(78, 118, 228, 44));
    jButton2.setText("jButton2");

    this.setSize(new Dimension(400, 300));
    this.setTitle("bb");

    this.getContentPane().add(jButton1, null);
    this.getContentPane().add(jButton2, null);
  }

  void jButton1_actionPerformed(ActionEvent e) {
Frame2 fflo=  new Frame2(this);
    fflo.setVisible(true);
  }

}

class Frame1_jButton1_actionAdapter implements java.awt.event.ActionListener {
  Frame1 adaptee;

  Frame1_jButton1_actionAdapter(Frame1 adaptee) {
    this.adaptee = adaptee;
  }
  public void actionPerformed(ActionEvent e) {
    adaptee.jButton1_actionPerformed(e);
  }
}



package index;

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

public class Frame2 extends JFrame {
  JButton jButton1 = new JButton();
  JButton jButton2 = new JButton();
  JButton jButton3 = new JButton();
 private Frame1 f; 

  public Frame2(Frame1 f) {
    try {
      jbInit(f);
    }
    catch(Exception e) {
      e.printStackTrace();
    }
  }
  private void jbInit(Frame1 f) throws Exception {
    jButton1.setBounds(new Rectangle(50, 43, 158, 42));
    jButton1.setText("jButton1");
    jButton1.addActionListener(new Frame2_jButton1_actionAdapter(this));
    this.setSize(new Dimension(400, 300));
    this.setTitle("client");

    this.getContentPane().setLayout(null);
    jButton2.setBounds(new Rectangle(224, 87, 132, 41));
    jButton2.setText("jButton2");
    jButton3.setBounds(new Rectangle(257, 27, 131, 31));
    jButton3.setText("jButton3");
    jButton3.addActionListener(new Frame2_jButton3_actionAdapter(this));
    this.getContentPane().add(jButton1, null);
    this.getContentPane().add(jButton2, null);
    this.getContentPane().add(jButton3, null);
  }

  void jButton1_actionPerformed(ActionEvent e) {

  }

  void jButton3_actionPerformed(ActionEvent e) {
f.jButton2.setVisible(false);
  }
}

class Frame2_jButton1_actionAdapter implements java.awt.event.ActionListener {
  Frame2 adaptee;

  Frame2_jButton1_actionAdapter(Frame2 adaptee) {
    this.adaptee  = adaptee;
  }
  public void actionPerformed(ActionEvent e) {
    adaptee.jButton1_actionPerformed(e);
  }
}

class Frame2_jButton3_actionAdapter implements java.awt.event.ActionListener {
  Frame2 adaptee;

  Frame2_jButton3_actionAdapter(Frame2 adaptee) {
    this.adaptee = adaptee;
  }
  public void actionPerformed(ActionEvent e) {
    adaptee.jButton3_actionPerformed(e);
  }
}


Quand je clic sur le button3 ( Frame2) ,( Dans  une des instances de Frame2) Le bouton2 du Frame1 ( dans la derniere instance généré) devient invisible...........

Merci pour votre aide

Code de la route GRATUIT
Messages postés
519
Date d'inscription
mercredi 21 mars 2007
Statut
Membre
Dernière intervention
19 décembre 2016
25
Pff c'est pas humain de lire du code généré par les éditeurs d'interface...

J'ai essayé ton code et effectivement ton bouton devient invisible seulement sur la dernière instance crée. C'est normal car pour rendre invisible un composant, java fait appel à son parent, qui est unique, et qui est le dernier container dans lequel tu as ajouté le composant.

Si tu veux que le bouton devienne invisible sur les 2 fenêtres il faut absolument qu'il ne soit pas static.

Voici une modification de ton code qui fait ça d'une façon parmi bcp d'autres (les modifications sont en rouge). Dis-moi si ça te convient :

Frame
<hr size= "2" width="100%" />
package index;

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

public class Frame extends JFrame {
  JPanel contentPane;
  JButton jButton1 = new JButton();
 private Frame1[] appli = new Frame1[2];
  //Construct the frame
  public Frame() {
    enableEvents(AWTEvent.WINDOW_EVENT_MASK);
    try {
      jbInit();
    }
    catch(Exception e) {
      e.printStackTrace();
    }
  }
  //Component initialization
  private void jbInit() throws Exception  {
    contentPane = (JPanel) this.getContentPane();
    jButton1.setBounds(new Rectangle(137, 57, 182, 32));
    jButton1.setText("jButton1");
    jButton1.addActionListener(new Frame_jButton1_actionAdapter(this));
    contentPane.setLayout(null);
    this.setSize(new Dimension(400, 300));
    this.setTitle("index");
    contentPane.setDebugGraphicsOptions(0);
    contentPane.add(jButton1, null);
  }
  //Overridden so we can exit when window is closed
  protected void processWindowEvent(WindowEvent e) {
    super.processWindowEvent(e);
    if (e.getID() == WindowEvent.WINDOW_CLOSING) {
      System.exit(0);
    }
  }

  void jButton1_actionPerformed(ActionEvent e) {
    for (int i = 0; i < 2; i++) {
        appli[i] = new Frame1();
          appli[i].setVisible(true);

    }

  }
}

class Frame_jButton1_actionAdapter implements java.awt.event.ActionListener {
  Frame adaptee;

  Frame_jButton1_actionAdapter(Frame adaptee) {
    this.adaptee = adaptee;
  }
  public void actionPerformed(ActionEvent e) {
    adaptee.jButton1_actionPerformed(e);
  }
}

Frame 1
<hr size="2" width="100%" />
package index;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;
import java.util.Collection;

public class Frame1 extends JFrame {
    JButton jButton1 = new JButton();
    JButton jButton2;

    private static Collection<Frame1> allFrames1 = new ArrayList<Frame1>();

    public static void hideAllButtons2() {
        for (Frame1 f1 : allFrames1)
            f1.jButton2.setVisible(false);
    }

    public Frame1() {
        try {
            jbInit();
        } catch (Exception e) {
            e.printStackTrace();
        }
        allFrames1.add(this);
    }

    private void jbInit() throws Exception {

        jButton2 = new JButton();
        jButton1.setBounds(new Rectangle(85, 51, 231, 46));
        jButton1.setText("jButton1");
        jButton1.addActionListener(new Frame1_jButton1_actionAdapter(this));
        this.getContentPane().setLayout(null);
        jButton2.setBounds(new Rectangle(78, 118, 228, 44));
        jButton2.setText("jButton2");

        this.setSize(new Dimension(400, 300));
        this.setTitle("bb");

        this.getContentPane().add(jButton1, null);
        this.getContentPane().add(jButton2, null);
    }

    void jButton1_actionPerformed(ActionEvent e) {
        Frame2 fflo = new Frame2(this);
        fflo.setVisible(true);
    }

}

class Frame1_jButton1_actionAdapter implements java.awt.event.ActionListener {
    Frame1 adaptee;

    Frame1_jButton1_actionAdapter(Frame1 adaptee) {
        this.adaptee = adaptee;
    }

    public void actionPerformed(ActionEvent e) {
        adaptee.jButton1_actionPerformed(e);
    }
}

Frame 2
<hr size="2" width="100%" />
package index;

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

public class Frame2 extends JFrame {
    JButton jButton1 = new JButton();
    JButton jButton2 = new JButton();
    JButton jButton3 = new JButton();
    private Frame1 f;

    public Frame2(Frame1 f) {
        try {
            jbInit(f);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void jbInit(Frame1 f) throws Exception {
        jButton1.setBounds(new Rectangle(50, 43, 158, 42));
        jButton1.setText("jButton1");
        jButton1.addActionListener(new Frame2_jButton1_actionAdapter(this));
        this.setSize(new Dimension(400, 300));
        this.setTitle("client");

        this.getContentPane().setLayout(null);
        jButton2.setBounds(new Rectangle(224, 87, 132, 41));
        jButton2.setText("jButton2");
        jButton3.setBounds(new Rectangle(257, 27, 131, 31));
        jButton3.setText("jButton3");
        jButton3.addActionListener(new Frame2_jButton3_actionAdapter(this));
        this.getContentPane().add(jButton1, null);
        this.getContentPane().add(jButton2, null);
        this.getContentPane().add(jButton3, null);
    }

    void jButton1_actionPerformed(ActionEvent e) {

    }

    void jButton3_actionPerformed(ActionEvent e) {
        Frame1.hideAllButtons2();
    }
}

class Frame2_jButton1_actionAdapter implements java.awt.event.ActionListener {
    Frame2 adaptee;

    Frame2_jButton1_actionAdapter(Frame2 adaptee) {
        this.adaptee = adaptee;
    }

    public void actionPerformed(ActionEvent e) {
        adaptee.jButton1_actionPerformed(e);
    }
}

class Frame2_jButton3_actionAdapter implements java.awt.event.ActionListener {
    Frame2 adaptee;

    Frame2_jButton3_actionAdapter(Frame2 adaptee) {
        this.adaptee = adaptee;
    }

    public void actionPerformed(ActionEvent e) {
        adaptee.jButton3_actionPerformed(e);
    }
}
Messages postés
10
Date d'inscription
vendredi 25 avril 2008
Statut
Membre
Dernière intervention
30 avril 2008

Merci
Mais ya trop d'erreur sur ce code.
Je développe avec jbuilder sous linux.

Enfaite je veux que chaque bouton3 du Frame2 permet de faire disparaitre le bouton2 du frame1 qui l'a généré!!!!

Merciiiiii biennnnnn

Code de la route GRATUIT
Messages postés
519
Date d'inscription
mercredi 21 mars 2007
Statut
Membre
Dernière intervention
19 décembre 2016
25
Ya pas d'erreurs sur ce code. En tout cas pas sous eclipse.

Effectivement je me rends compte ne lisant ton premier post que ce n'est pas ce que tu voulais. Dans ce cas, je ne me démonte pas et je te propose autre chose, qui est encore plus simple finalement.
Tu étais sur la bonne voie en passant le f en paramètre du constructeur de Frame2, seulement tu avais oublié de mettre le this.f = f. Toujours pareil : les modifications sont en rouge . Pour ce qui est des erreurs dis-moi lesquelles et on en reparle.

Frame
<hr size ="2" width= "100%" />
package index;

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

public class Frame extends JFrame {
  JPanel contentPane;
  JButton jButton1 = new JButton();
 private Frame1[] appli = new Frame1[2];
  //Construct the frame
  public Frame() {
    enableEvents(AWTEvent.WINDOW_EVENT_MASK);
    try {
      jbInit();
    }
    catch(Exception e) {
      e.printStackTrace();
    }
  }
  //Component initialization
  private void jbInit() throws Exception  {
    contentPane = (JPanel) this.getContentPane();
    jButton1.setBounds(new Rectangle(137, 57, 182, 32));
    jButton1.setText("jButton1");
    jButton1.addActionListener(new Frame_jButton1_actionAdapter(this));
    contentPane.setLayout(null);
    this.setSize(new Dimension(400, 300));
    this.setTitle("index");
    contentPane.setDebugGraphicsOptions(0);
    contentPane.add(jButton1, null);
  }
  //Overridden so we can exit when window is closed
  protected void processWindowEvent(WindowEvent e) {
    super.processWindowEvent(e);
    if (e.getID() == WindowEvent.WINDOW_CLOSING) {
      System.exit(0);
    }
  }

  void jButton1_actionPerformed(ActionEvent e) {
    for (int i = 0; i < 2; i++) {
        appli[i] = new Frame1();
          appli[i].setVisible(true);

    }

  }
}

class Frame_jButton1_actionAdapter implements java.awt.event.ActionListener {
  Frame adaptee;

  Frame_jButton1_actionAdapter(Frame adaptee) {
    this.adaptee = adaptee;
  }
  public void actionPerformed(ActionEvent e) {
    adaptee.jButton1_actionPerformed(e);
  }
}

Frame 1
<hr size="2" width="100%" />
package index;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;
import java.util.Collection;

public class Frame1 extends JFrame {
    JButton jButton1 = new JButton();
    JButton jButton2;

    public Frame1() {
        try {
            jbInit();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void jbInit() throws Exception {

        jButton2 = new JButton();
        jButton1.setBounds(new Rectangle(85, 51, 231, 46));
        jButton1.setText("jButton1");
        jButton1.addActionListener(new Frame1_jButton1_actionAdapter(this));
        this.getContentPane().setLayout(null);
        jButton2.setBounds(new Rectangle(78, 118, 228, 44));
        jButton2.setText("jButton2");

        this.setSize(new Dimension(400, 300));
        this.setTitle("bb");

        this.getContentPane().add(jButton1, null);
        this.getContentPane().add(jButton2, null);
    }

    void jButton1_actionPerformed(ActionEvent e) {
        Frame2 fflo = new Frame2(this);
        fflo.setVisible(true);
    }

}

class Frame1_jButton1_actionAdapter implements java.awt.event.ActionListener {
    Frame1 adaptee;

    Frame1_jButton1_actionAdapter(Frame1 adaptee) {
        this.adaptee = adaptee;
    }

    public void actionPerformed(ActionEvent e) {
        adaptee.jButton1_actionPerformed(e);
    }
}

Frame 2
<hr size="2" width="100%" />
package index;

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

public class Frame2 extends JFrame {
    JButton jButton1 = new JButton();
    JButton jButton2 = new JButton();
    JButton jButton3 = new JButton();
    private Frame1 f;

    public Frame2(Frame1 f) {
        this.f = f;
        try {
            jbInit();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void jbInit() throws Exception {
        jButton1.setBounds(new Rectangle(50, 43, 158, 42));
        jButton1.setText("jButton1");
        jButton1.addActionListener(new Frame2_jButton1_actionAdapter(this));
        this.setSize(new Dimension(400, 300));
        this.setTitle("client");

        this.getContentPane().setLayout(null);
        jButton2.setBounds(new Rectangle(224, 87, 132, 41));
        jButton2.setText("jButton2");
        jButton3.setBounds(new Rectangle(257, 27, 131, 31));
        jButton3.setText("jButton3");
        jButton3.addActionListener(new Frame2_jButton3_actionAdapter(this));
        this.getContentPane().add(jButton1, null);
        this.getContentPane().add(jButton2, null);
        this.getContentPane().add(jButton3, null);
    }

    void jButton1_actionPerformed(ActionEvent e) {

    }

    void jButton3_actionPerformed(ActionEvent e) {
        f.jButton2.setVisible(false);
    }
}

class Frame2_jButton1_actionAdapter implements java.awt.event.ActionListener {
    Frame2 adaptee;

    Frame2_jButton1_actionAdapter(Frame2 adaptee) {
        this.adaptee = adaptee;
    }

    public void actionPerformed(ActionEvent e) {
        adaptee.jButton1_actionPerformed(e);
    }
}

class Frame2_jButton3_actionAdapter implements java.awt.event.ActionListener {
    Frame2 adaptee;

    Frame2_jButton3_actionAdapter(Frame2 adaptee) {
        this.adaptee = adaptee;
    }

    public void actionPerformed(ActionEvent e) {
        adaptee.jButton3_actionPerformed(e);
    }
}
Messages postés
10
Date d'inscription
vendredi 25 avril 2008
Statut
Membre
Dernière intervention
30 avril 2008

Merciiiiiiiiiiiiiiiiiiiiiii
Ca fonctionne
Mais tu as oublié de mettre JButton jButton2; en rouge

Merciiiiiiiiiiiiiiiiiiiiiiiiiiiii bien

Code de la route GRATUIT
Messages postés
10
Date d'inscription
vendredi 25 avril 2008
Statut
Membre
Dernière intervention
30 avril 2008

thanks very much
Merciiiiiiiiiiiii

Code de la route GRATUIT