Voici une classe dérivée de JPanel qui repose sur les Box et les Vector.
Elle permet de gérer une interface graphique ligne à ligne sans se prendre la tête
avec les LayoutManager !!!
Voici un petit exemple de son utilisation :
Source / Exemple :
/*************************************************
*
- Classe Main qui lance l'application
*
import java.awt.Dimension;
import java.awt.*;
/**
- Classe qui est le point d'entrée de l'application
- C'est elle qui va lancer la fenêtre de convertisseur
-
- @author Duss
- /
public class Main
{
public static void main(String[] args)
{
// Déclaration d'un objet de type Convertisseur
// et instanciation de ce même objet
Base fen = new Base();
// Affectation d'une taille
fen.setSize(450,410);
// Affichage
fen.setVisible(true);
// Définition du titre
fen.setTitle("Convertisseur");
// On récupère la taille de l'écran (la résolution)
// et on place notre fenêtre au milieu
Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
fen.setLocation((screen.width - fen.getSize().width)/2,(screen.height - fen.getSize().height)/2);
}
}
/*************************************************
*
- Classe Base dérivée de JFrame sur laquelle on va placer
- nos composants
*
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
/**
public class Base extends JFrame
{
// Déclaration de l'objet TabLine
private TabLine _tab;
// Constructeur
public Base()
{
// Création d'un TabLine de 2 lignes
// avec un espace de 2 pixels entre les lignes
_tab = new TabLine(2,2);
// Ajout du TabLine au fond de la fenetre
getContentPane().add(_tab);
// Création d'un bouton
JButton but = new JButton("ok");
// Implémentation de actionPerformed à la volée
// dans une classe anonyme (j'ai honte mais je suis pressé !)
but.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent arg0)
{
// Ajout de 2 lignes supplémentaires
_tab.addLines(2);
// Ajout de 2 composants sur ces lignes
_tab.put(new JLabel("1"),3);
_tab.put(new JLabel("2"),4);
}
});
// Ajout de comosants sur les lignes 1 et 2
_tab.put(new JTextField(),1);
_tab.put(but,2);
}
}
/*************************************************
*
- Classe TabLine qui permet la gestion ligne par ligne
*
import java.awt.Component;
import java.awt.GridLayout;
import java.util.Vector;
import javax.swing.*;
/**
- Classe permettant de gérer son
- interface graphique ligne / ligne
-
- @author Duss
- /
public class TabLine extends JPanel
{
private int _nbLignes, _space;
private Vector _lignes;
private Box _box;
/**
- Constructeur
-
- @param nbLignes Le nombre de ligne
- @param space L'espace horizontal (en pixels) entre les lignes
- /
public TabLine(int nbLignes, int space)
{
_nbLignes = nbLignes;
_space = space;
// On créé une box verticale
_box = Box.createVerticalBox();
// On passe en grid avec une seule case
// pour qu'elle prenne toute la place
setLayout(new GridLayout(1,1));
// On ajoute notre box
add(_box);
// Initialistation d'un Vector
_lignes = new Vector(1);
for (int i = 0 ; i < _nbLignes ; i++)
{
// Ajout des lignes dans le vector
_lignes.addElement(Box.createHorizontalBox());
// Puis dans le box
_box.add((Box)_lignes.get(i));
// Ajout des espaces
_box.add(Box.createVerticalStrut(_space));
}
}
/**
- Méthode permettant d'ajouter un
- composant sur une ligne
- @param comp Composant
- @param ligne La ligne
- /
public void put(Component comp,int ligne)
{
((Box)_lignes.get(ligne -1)).add(comp);
}
/**
- Méthode pour insérer un espace
- entre deux composants sur
- une ligne
-
- @param ligne La ligne
- @param space La valeur en pixels de l'espace
- /
public void insertHSpace(int ligne,int space)
{
((Box)_lignes.get(ligne -1)).add(Box.createHorizontalStrut(space));
}
/**
- Méthode pour insérer des lignes
- à la fin de la page
*
- @param nb Le nombre de lignes
- /
public void addLines(int nb)
{
int taille = _lignes.size();
for (int i = 0 ; i< nb ;i++)
{
_lignes.addElement(Box.createHorizontalBox());
_box.add((Box)_lignes.get(taille + i));
_box.add(Box.createVerticalStrut(_space));
}
revalidate();
}
}
Conclusion :
Voilà, le mieux est de mettre chaque classe dans un fichier java qui porte son nom.
J'ai essayé de commenté au maximum.
Si on met un seul composant, il se centre tout seul sur la ligne.
Si on ne met pas de composant sur une ligne, elle n'apparait pas.
Si vous voulez 'sauter une ligne' , insérez un espace horizontal sur la ligne.
Bon code
Duss
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.