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 :
- FlowLayout (Le plus simple, places les éléments a la suite à la bonne taille)
- BorderLayout (Permet de fixer un élément en haut, bas, droite ou gauche)
- GridLayout (Une grille permet le placement dans la Frame (assez simple et pas mal))
- GridBagLayout (super puissant mais compliqué à utiliser)
- CardLayout (connait pas, j'ai pas encore testé, apparement ca marcherai par le biais "d'onglet")
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.
| Tableau | Vector |
| on doit fixer la taille | on ne fixe pas la taille |
| type primitif ou Object | type Object |
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
- si elle sont dans des classes différentes
- si elle ont un nombre de paramètres différent
- si elle ont le meme nombre de paramètres, mais de type différent
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 !