Interface graphique (GUI)

Echanges entre classes et instances

Toutes les méthodes permettant d'agir sur une fenêtre peuvent aussi être appelées depuis la classe qui a créé une instance de cette fenêtre. Il faut alors faire précéder le nom de la méthode du nom de l'instance, avec un point entre les deux. Par exemple, modifier la classe EssaiFenetre ainsi :
import java.awt.Color;
public class EssaiFenetre {
  static MaFenetre fenetre1,fenetre2;
  public static void main(String[] args) {
    fenetre1=new MaFenetre();
    fenetre2=new MaFenetre();		
    fenetre1.setTitle("Première fenêtre");
    fenetre1.setLocation(200,200);
    fenetre1.panneau_fond.setBackground(new Color(150,0,150));
    fenetre1.changeTexte();
    fenetre2.setTitle("Deuxième fenêtre");
    fenetre2.setLocation(600,400);
    fenetre2.panneau_fond.setBackground(new Color(0,150,150));
  }
}
Ce programme crée deux instances différentes de MaFenetre, appelées fenetre1 et fenetre2, puis modifie l'emplacement et l'aspect de chacune.

De manière générale les méthodes et les variables non static d'une classe, peuvent être appelées en faisant précéder leur nom de celui de l'instance qui les possède, suivi d'un point.

Les méthodes et les variables static d'une classe peuvent être appelées depuis une autre classe en faisant précéder leur nom de celui de la classe qui les possède, suivi d'un point.
Exemple : créer un nouveau projet java appelé "clonage". Y ajouter une classe exécutable appelée Generateur, contenant le code

package clonage;
public class Generateur {
    static int numero=0;
	public static void main(String[] args) {
		      new Clone();
	}

}
Ajouter également une classe non exécutable appelée Clone, dérivant de JFrame, contenant le code
package clonage;
import javax.swing.*;
import java.awt.event.*;
public class Clone extends JFrame {
	Clone(){
		super();
		JPanel fond=new JPanel();
		add(fond);
		JLabel nom=new JLabel("Clone n°"+Generateur.numero); 
		fond.add(nom);
		JButton B1=new JButton("Clonage!");
		B1.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				new Clone();
			}
		});
		fond.add(B1);
		JButton B2=new JButton("Stop!");
		B2.addActionListener(new ActionListener(){
			public void actionPerformed (ActionEvent e){
				System.exit(0);
			}});
		fond.add(B2);
		setVisible(true);
		pack();
		setLocation(getWidth()*(Generateur.numero%8),getHeight()*(Generateur.numero/8));
		Generateur.numero+=1;
	}
}

En exécutant la classe Generateur, une instance de Clone est créée. Chaque instante de Clone contient un bouton (B1) déclenchant la création d'une nouvelle instance de Clone (anonyme). A chaque création d'une instance de Clone, la variable static numero de la classe Generateur est incrémentée, grâce à la ligne Generateur.numero+=1; qui se trouve à la fin du constructeur de Clone.
La valeur de cette variable numero est aussi utilisée pour positionner la fenêtre créée, de sorte que toutes les instances de Clone ne se superposent pas au même endroit (ligne setLocation(getWidth()*(Generateur.numero%8),getHeight()*(Generateur.numero/8)); )
La valeur de numero est utilisée également à l'intérieur du texte du JLabel nom, de manière à figurer dans la fenêtre.

 
Licence Creative Commons
licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 3.0 non transposé
Auteur : Nathalie Bonnin
Professeur de Physique, Chimie, Informatique au lycée La Martinière Monplaisir (Lyon 8ème)
Contact :
nathalie.bonnin (chez) scientillula.net
Licence Creative Commons
La totalité du contenu du site Scientillula.net appartient à Nathalie Bonnin et est mise à disposition selon les termes de la licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 3.0 non transposé