Articles

Aller au blog Articles importants Aller au site principal Mon CV [fr] Mon CV [en] Aller à Aderci Normandie

La classe LayoutManager

Tout d'abord un code simple pour générer votre frame :
Deux méthodes que nous appelerons la méthode Person et la méthode Colin ;)

Méthode 1 : la plus simple, la méthode Colin :

// import de awt :
import java.awt.*;

public class MonApplication {
	// le main
	public static void main(String [] args) {
		// on créer la frame
		Frame f = new Frame("Frame");
		
		f.setSize(200, 300);
		f.setVisible(true);
	}
}

Vous remaquerez ici qu'on utilise pas l'héritage, tout est créé à la suite dans le main().
L'usage est très simple.

Méthode 2 : la plus esthétique, la méthode Person :

// import de awt :
import java.awt.*;

// on hérite de Frame pour créer MaFrame :
public class MaFrame extends Frame {
	// constructeur :
	public MaFrame() {
		setTitle("MaFrame");
		setSize(200, 300);
		setVisible(true);
	}
	// le main
	public static void main(String [] args) {
		MaFrame frame1 = new MaFrame();
	}
}

On utilise l'héritage, la mise en forme de la frame est faite dans le nouveau constructeur.
Pour accéder à la frame, on utilise plus de "f.methode", l'appel de la methode directement est possible car on se trouve dans la classe elle même (tout du moins une classe hérité de Frame).
Remarquez comme le main est clair, l'utilisation est plus adapté pour une application gérant plusieurs frames :
On héritera alors une classe par fenêtre ;)

Le changement de LayoutManager
L'orsque vous ajoutez un élément Button par exemple, le LayoutManager gère l'affichage de ce nouveau composant.
Par défaut, sur une Frame, il sera de type BorderLayout, sur un Panel il sera de type FlowLayout par exemple.

Pour changer de LayoutManager, n'hésitez pas à utiliser la méthode setLayout(), ce qui nous donnera :

// import de awt :
import java.awt.*;

// on hérite de Frame pour créer MaFrame :
public class MaFrame extends Frame {
	// constructeur :
	public MaFrame() {
		setTitle("MaFrame");
		setSize(200, 300);
// ***************** changement du LayoutManager ***************** 
		setLayout(new FlowLayout());
// ********************************************************** 
		setVisible(true);
	}
	// le main
	public static void main(String [] args) {
		MaFrame frame1 = new MaFrame();
	}
}

Les différents types de LayoutManager
Il en existes quelques uns, ils implémentent l'interface LayoutManager (les interfaces et leurs implémentation, c'été la lecon d'aujourd'hui justement :p ) :

public void addLayoutComponent (String name, Component component);
public void removeLayoutComponent (Component component);
public Dimension preferredLayoutSize (Container parent);
public Dimension minimumLayoutSize (Container parent);
public void layoutContainer (Container parent);

Voici la liste des LayoutManager principaux présent dans java de base :

Pour terminer, un petit lien vers une page qui vous apprend à utiliser GridBagLayout.

Les collections

Une collection est le nom générale des structures de données en Java. Une tableau est un exemple primitif de collection. En java, les structures de données sont des classes.
Un exemple avec la classe Vector :
L'héritage : java.lang.Object <-- java.util.AbstractCollections <-- java.util.AbstractList <-- java.util.Vector
Un Vector est une sorte de tableau dont on n'a pas à gérer la taille. Le Vector est autoredimentionable.

TableauVector
on doit fixer la tailleon ne fixe pas la taille
type primitif ou Objecttype Object
Si on utilise des classes en dehors de java.lang, il faut le préciser dans le code.
Fichier : Vecteur.java
//Vecteur.java
import java.util.*;
public class Vecteur
{
     public static void main(String arg[])
     {
          Vector v = new Vector();
          //ajout d'éléments au Vector
          v.add("Balzac");
          v.add("Hugo");
          v.add("Corneille");
          //affichage du contenu
          System.out.println(v.toString());
          //est ce qu'un élément est présent?
          System.out.println(v.contains("Diderot"));
          //parcours du vecteur en utilisant un indice
          for (int i = 0; i< v.size(); i++)
          {
               System.out.println(i + " " + v.elementAt(i));
          }
          //suppression d'un élément
          v.remove("Hugo");
          //affichage
          System.out.println(v);
          //le vecteur est il vide ?
          System.out.println(v.isEmpty());
     }
}

Surcharge de nom

Signature d'une méthode :
signature = nom de la classe où est la méthode.
    + nom de la méthode.
    + nombre et types des paramètres.
signature d'une méthode = nom "interne" pour le compilateur.
    Exemple en C++

class Test
{public:
     void f() { ... }         --> signature = Test_f_vv()
     void f(int i) { ... }    --> signature = Test_f_vi(int i)
};

Effets :
2 méthodes peuvent porter le meme nom

Utilisation des Wrappers

Utilisation de la classe Vector et du Wrapper Float :

import java.util.*; //On importe toute la classe Util 
float x=3; //On crée un float x = 3
float temp;
Vector v=new Vector(); //On crée un Vector v
v.addElement(x); //Ne marche pas car x n'est pas un objet !
Float i=new Float(x);
v.addElement(i);
//Retourner le premier float contenu dans v
temp = ((Float) v.firstElement()).floatValue(); 
//On utilise (Float) pour spécifier que v.firstElement() est un Objet Float

Mettre de la couleur dans un terminal Linux

Voici un petit code source qui vous permettra de jouer avec les couleurs pour votre projet.

public class CouleurConsole
{
     public static void main(String arg[ ])
     {
          int i=0;
          int j=0;
          for(i=0;i<10;i++)
          {
               System.out.println("\033[3"+i+"mVive les couleurs\033[4"+j+"m");
               j++;
          }
     }
}
Allez voir ici ! Ou encore ici !